Как добавить правило CORS в эмулятор хранилища Azure с помощью HTTP?

Чтобы использовать службу таблиц хранилища Azure (эмулятора), мне нужно добавить правило CORS для моего приложения браузера TypeScript.

Я хочу добавить это правило вручную, используя интерфейс REST (из Postman, а не из браузера с той же политикой происхождения). В документации не указан правильный URL-адрес для эмулятора (https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-table-service-properties). Для команд DML это похоже на мой запрос (https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/insert-entity).

Запрос:

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>

Результат:

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

Какой URL правильный или что я делаю не так?


person abbgrade    schedule 15.01.2017    source источник


Ответы (2)


Если вы загрузили Microsoft Azure Storage Explorer, вы можете установить его вверх, щелкнув правой кнопкой мыши "Контейнеры BLOB-объектов" под своей учетной записью.

введите здесь описание изображения

person viggity    schedule 09.10.2018

Вот сценарий Powershell для добавления правила CORS в эмулятор хранилища Azure. Это не ответ на этот вопрос, а решение моей проблемы:

$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
person abbgrade    schedule 15.01.2017