#azure #cors #azure-storage #azure-blob-storage
#azure #cors #azure-хранилище #azure-blob-хранилище
Вопрос:
Я пытаюсь перейти с устаревшего Microsoft.WindowsAzure.Storage
на Azure.Storage
. В моем приложении API у меня есть метод, который я время от времени вызываю для программной установки CORS
правил в моей учетной записи хранилища Azure.
Как мне добавить CORS
правила к свойствам с помощью new Azure.Storage.Blobs
?
Мой исходный код, который работал, Microsoft.WindowsAzure.Storage
выглядит следующим образом. В следующем коде _client
это экземпляр CloudBlobClient
. Я понимаю, что Azure.Storage.Blobs
мне нужно использовать BlobServiceClient
то, что я сейчас делаю, но, как я уже сказал, некоторые части следующего кода не работают, потому что некоторых методов / свойств больше нет. Я уверен, что они перемещены куда-то еще, но я не смог выяснить, где.
public async Task ConfigureCors()
{
var ALLOWED_CORS_ORIGINS = new List<String> { "http://localhost:49065", "https://myappdomain.com", "https://www.myappdomain", "https://login.microsoftonline.com" };
var ALLOWED_CORS_HEADERS = new List<String> { "x-ms-meta-qqfilename", "Content-Type", "x-ms-blob-type", "x-ms-blob-content-type" };
const CorsHttpMethods ALLOWED_CORS_METHODS = CorsHttpMethods.Get | CorsHttpMethods.Delete | CorsHttpMethods.Put | CorsHttpMethods.Options;
const int ALLOWED_CORS_AGE_DAYS = 5;
var properties = await _client.GetServicePropertiesAsync();
properties.DefaultServiceVersion = "2013-08-15";
await _client.SetServicePropertiesAsync(properties);
var addRule = true;
if (addRule)
{
var ruleWideOpenWriter = new CorsRule()
{
AllowedHeaders = ALLOWED_CORS_HEADERS,
AllowedOrigins = ALLOWED_CORS_ORIGINS,
AllowedMethods = ALLOWED_CORS_METHODS,
MaxAgeInSeconds = (int)TimeSpan.FromDays(ALLOWED_CORS_AGE_DAYS).TotalSeconds
};
properties.Cors.CorsRules.Clear();
properties.Cors.CorsRules.Add(ruleWideOpenWriter);
await _client.SetServicePropertiesAsync(properties);
}
}
Похоже, я могу получить и установить свойства, изменив _client.GetServicePropertiesAsync()
_client.GetPropertiesAsync()
, но DefaultServiceVersion
их больше нет. Также я не могу найти правильный способ установки CORS
правил.
Я был бы признателен за ваши предложения. Спасибо!
Ответ №1:
Вы можете использовать приведенный ниже код при использовании Azure.Storage.Blobs
(я использую метод синхронизации, пожалуйста, измените его на метод async, если вам это нужно):
var properties = blobServiceClient.GetProperties().Value;
properties.DefaultServiceVersion = "xxx";
BlobCorsRule rule = new BlobCorsRule();
rule.AllowedHeaders= "x-ms-meta-qqfilename,Content-Type,x-ms-blob-type,x-ms-blob-content-type";
rule.AllowedMethods = "GET,DELETE,PUT,OPTIONS";
rule.AllowedOrigins = "http://localhost:49065,https://myappdomain.com,https://www.myappdomain,https://login.microsoftonline.com";
rule.MaxAgeInSeconds = 3600; // in seconds
properties.Cors.Add(rule);
blobServiceClient.SetProperties(properties);
Комментарии:
1. Работает отлично. Спасибо!