gpt4 book ai didi

c# - 使用 ASP.NET 在 Windows Azure Blob 存储上设置 CORS

转载 作者:太空狗 更新时间:2023-10-30 00:31:43 25 4
gpt4 key购买 nike

我正在尝试在我的 Windows Azure blob 存储帐户上设置 CORS 属性。我正在使用 ASP.NET 服务器发送 PUT 请求。

服务器正在发回禁止响应,表示“服务器无法验证请求。请确保授权 header 的值正确形成,包括签名。

所以它一定是我的身份验证 header 中的内容。这是我用来获取标题的两个函数。

public string GetWindowsAzureAuthenticationHeader(string verb)
{
string stringToSign = String.Format("{0}\n"
+ "\n" // content encoding
+ "\n" // content language
+ "\n" // content length
+ "\n" // content md5
+ "\n" // content type
+ "\n" // date
+ "\n" // if modified since
+ "\n" // if match
+ "\n" // if none match
+ "\n" // if unmodified since
+ "\n" // range
+ "x-ms-date:" + DateTime.UtcNow.ToString("R") + "\nx-ms-version:2013-08-15\n" // headers
+ "/{1}\ncomp:properties\nrestype:service", verb, CloudConfig.StorageAccountName);

return SignThis(stringToSign, CloudConfig.StorageAccountKey, CloudConfig.StorageAccountName);
}

private string SignThis(string stringToSign, string key, string account)
{
string signature;
var unicodeKey = Convert.FromBase64String(key);
using (var hmacSha256 = new HMACSHA256(unicodeKey))
{
var dataToHmac = Encoding.UTF8.GetBytes(stringToSign);
signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac));
}

String authorizationHeader = String.Format(
CultureInfo.InvariantCulture,
"{0} {1}:{2}",
"SharedKey",
account,
signature);

return authorizationHeader;
}

这是发送请求的 Controller 操作。 _mediaFactory.GetWindowsAzureCors 方法通过我的 CORS 请求返回 XML 文件的内容。

var content = Encoding.UTF8.GetBytes(_mediaFactory.GetWindowsAzureCors(ControllerContext.HttpContext.Server));
var request = (HttpWebRequest)WebRequest.Create(CloudConfig.StorageAccountUri);

request.Method = "PUT";
request.Headers.Add("x-ms-date", DateTime.UtcNow.ToString("R"));
request.Headers.Add("x-ms-version", "2013-08-15");
request.ContentType = "text/plain; charset=UTF-8";
request.Host = string.Format("{0}.blob.core.windows.net", CloudConfig.StorageAccountName);
request.Headers.Add("Authorization", _mediaFactory.GetWindowsAzureAuthenticationHeader(request.Method));

request.GetRequestStream().Write(content, 0, content.Length);
using (var response = (HttpWebResponse) request.GetResponse())
{
model.StatusCode = response.StatusCode;
model.Response = response.StatusDescription;
}

我做错了什么?

最佳答案

其实很简单。

首先,在项目中添加对 Azure 存储客户端库的引用。如果您使用 Nuget,您想要安装的包是 WindowsAzure.Storage .

之后,设置CORS设置的函数是SetServiceProperties 。以下是执行此操作的示例代码:

            CloudStorageAccount storageAccount = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, accountKey), true);
var blobClient = storageAccount.CreateCloudBlobClient();
ServiceProperties blobServiceProperties = new ServiceProperties();
blobServiceProperties.Cors.CorsRules.Add(new CorsRule(){
AllowedHeaders = new List<string>() {"*"},
ExposedHeaders = new List<string>() {"*"},
AllowedMethods = CorsHttpMethods.Post | CorsHttpMethods.Put | ... Other Allowed Methods,
AllowedOrigins = new List<string>() {"http://yourdomain.com", "https://yourdomain.com", "blah", "blah", "blah"},
MaxAgeInSeconds = 3600,
});
blobClient.SetServiceProperties(blobServiceProperties);

关于c# - 使用 ASP.NET 在 Windows Azure Blob 存储上设置 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23596917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com