Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do i add a CORS rule to the Azure Storage Emulator with HTTP?

To use the Azure Storage (Emulator) Table Service, i need to add a CORS rule for my TypeScript Browser App.

I want to add that rule manually using the REST interface (from Postman, not the Browser with the Same Origin Policy). The documentation does not give the correct URL for the Emulator (https://learn.microsoft.com/en-us/rest/api/storageservices/fileservices/set-table-service-properties). For DML commands it is like in my request (https://learn.microsoft.com/en-us/rest/api/storageservices/fileservices/insert-entity).

The request is:

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>

The result is:

<?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>

What is the correct URL or what am i doing wrong?

like image 609
abbgrade Avatar asked Jan 15 '17 09:01

abbgrade


People also ask

How do I enable CORS in Azure blob storage?

To enable CORS, you need to set the appropriate service properties using version 2013-08-15 or later for the Blob, Queue, and Table services, or version 2015-02-21 or for the File service. You enable CORS by adding CORS rules to the service properties.

How do I connect to Azure storage emulator?

To start the Azure Storage Emulator: Select the Start button or press the Windows key. Begin typing Azure Storage Emulator . Select the emulator from the list of displayed applications.


2 Answers

If you download the Microsoft Azure Storage Explorer, you can set it up by right clicking on "Blob Containers" under your account.

enter image description here

like image 173
viggity Avatar answered Oct 11 '22 13:10

viggity


Here is a Powershell script to add a CORS rule to the Azure Storage Emulator. It is not the answer to this question but a solution for my 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 = (@{
    AllowedHeaders=@("*");
    AllowedOrigins=@("*");
    ExposedHeaders=@("Content-Length");
    MaxAgeInSeconds=60*60*24;
    AllowedMethods=@("Get", "Post")
})

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

# check
Get-AzureStorageCORSRule `
    -ServiceType Table `
    -Context $Context
like image 26
abbgrade Avatar answered Oct 11 '22 12:10

abbgrade