3

Um den Azure Storage (Emulator) -Tabellendienst zu verwenden, muss ich eine CORS-Regel für meine TypeScript-Browser-App hinzufügen.Wie füge ich dem Azure-Speicheremulator mit HTTP eine CORS-Regel hinzu?

Ich möchte diese Regel manuell mit der REST-Schnittstelle hinzufügen (aus Postman, nicht der Browser mit der gleichen Herkunft Policy). Die Dokumentation gibt nicht die richtige URL für den Emulator (https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-table-service-properties). Für DML-Befehle ist es wie in meiner Anfrage (https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/insert-entity).

Die Anfrage ist:

PUT /devstoreaccount1/?restype=service&comp=properties HTTP/1.1 
Host: 127.0.0.1:10002 
x-ms-version: 2013-08-15 
Content-Type: application/xml 
Cache-Control: no-cache 
Postman-Token: 280f880b-d6df-bb1d-bc12-eca411e18310 

<StorageServiceProperties> 
    <Cors> 
     <CorsRule> 
      <AllowedOrigins>http://localhost:3030</AllowedOrigins> 
      <AllowedMethods>GET,PUT,POST</AllowedMethods> 
      <MaxAgeInSeconds>500</MaxAgeInSeconds> 
      <ExposedHeaders>x-ms-meta-data*,x-ms-meta-target*,x-ms-meta-abc</ExposedHeaders> 
      <AllowedHeaders>x-ms-meta-*</AllowedHeaders> 
     </CorsRule> 
    </Cors> 
</StorageServiceProperties> 

Das Ergebnis ist:

<?xml version="1.0" encoding="utf-8"?> 
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <m:code>ResourceNotFound</m:code> 
    <m:message xml:lang="en-US">The specified resource does not exist. 
RequestId:8137042f-0402-46c6-aa8c-fbf9f4601d33 
Time:2017-01-15T09:13:51.7500394Z</m:message> 
</m:error> 

Was die richtige URL ist oder was mache ich falsch?

Antwort

4

Hier ist ein Powershell-Skript zum Hinzufügen einer CORS-Regel zum Azure Storage-Emulator. Es ist nicht die Antwort auf diese Frage, sondern eine Lösung für mein Problem:

$ErrorActionPreference = "Stop"; 

# config 

$AccountName='devstoreaccount1' 
$AccountKey='Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==' 

# derived config 

$BlobEndpoint="http://127.0.0.1:10000/$($AccountName)" 
$QueueEndpoint="http://127.0.0.1:10001/$($AccountName)" 
$TableEndpoint="http://127.0.0.1:10002/$($AccountName)" 

$ConnectionString = "" + 
    "DefaultEndpointsProtocol=http;" + 
    "BlobEndpoint=$($BlobEndpoint);" + 
    "QueueEndpoint=$($QueueEndpoint);" + 
    "TableEndpoint=$($TableEndpoint);" + 
    "AccountName=$($AccountName);" + 
    "AccountKey=$($AccountKey)" 

# authentication 

$Context = New-AzureStorageContext ` 
    -ConnectionString $ConnectionString 

# cors rules 
$CorsRules = (@{ 
    [email protected]("*"); 
    [email protected]("*"); 
    [email protected]("Content-Length"); 
    MaxAgeInSeconds=60*60*24; 
    [email protected]("Get", "Post") 
}) 

Set-AzureStorageCORSRule ` 
    -ServiceType Table ` 
    -Context $Context ` 
    -CorsRules $CorsRules 

# check 
Get-AzureStorageCORSRule ` 
    -ServiceType Table ` 
    -Context $Context 
Verwandte Themen