- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎收到了 403:
HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
当我在 app.config 中设置 HttpWebRequest.DefaultCachingPolicy
时,会发生这种情况,如下所示:
<system.net>
<requestCaching defaultPolicyLevel="Default" isPrivateCache="false">
<defaultHttpCachePolicy policyLevel="Default"/>
</requestCaching>
</system.net>
我这样做是因为我有一些我无法控制的遗留代码正在调用我提供的 Blob 存储的 API,就好像它是一个文件系统一样(每个文件最多 58 个相同的调用)。显然这并不理想。使用默认 HTTP 样式缓存是我想要的一种行为,因为它会导致我的应用程序仅在文件修改时下载文件。
这个问题似乎在每个其他请求中都会发生(例如,当请求被缓存并且服务器正在检查服务器内容是否已更改时,它似乎会发生)。
失败的请求和成功的请求之间的唯一区别似乎是包含:
If-None-Match: "<a blob etag>"
If-Modified-Since: <a date>
我在 github 上查看了 1.7.1 的 .net API(我正在使用)的代码,假设它与 SDK 1.6(我当前正在使用的)相比没有更改,它应该可以工作很好。
非常感谢任何帮助
更新:我编写了一些重现代码来提供帮助:
使用:.NET 4.0、Windows Azure SDK 1.6
using System;
using System.Net;
using System.Net.Cache;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
namespace AzureStorageProb
{
class Program
{
static void Main(string[] args)
{
const string accountKey = "<azure storage account key>";
const string account = "<azure storage account name>";
const string testBlob = "<blob path to test file>";
var cloudStorageAccount =
new CloudStorageAccount(
new StorageCredentialsAccountAndKey(account, accountKey),
useHttps: true);
var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
HttpWebRequest.DefaultCachePolicy =
new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
try
{
var blob = cloudBlobClient.GetBlobReference(testBlob);
blob.FetchAttributes();
blob.DownloadByteArray();
Console.WriteLine("First attempt worked!");
}
catch (StorageClientException ex)
{
Console.WriteLine(ex);
}
try
{
var blob = cloudBlobClient.GetBlobReference(testBlob);
blob.FetchAttributes();
blob.DownloadByteArray();
Console.WriteLine("Second attempt worked!");
}
catch (StorageClientException ex)
{
Console.WriteLine(ex);
}
Console.ReadKey();
}
}
}
最佳答案
原来罪魁祸首是 BlobRequest.SignRequest(request, creds);
快速浏览一下文档表明 If-None-Match
和 If-Modified-Since
都用作调用添加的身份验证 header 的计算的一部分。因为这些 header 是在 WINInet 计算身份验证 header 之后添加的(假设)。无论哪种方式,最终结果都是身份验证 header 提供的校验和现在无效。从而导致 403 Forbidden
。
解决方法:
我不会说 Azure Blob 存储已损坏...但我会说它不是真正的 RESTful,因为它无法正确遵守 HTTP 语义。
关于.net - System.Net.Caching.HttpRequestCachePolicy 和 CloudBlob.FetchAttributes 之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369660/
我在 Azure 容器存储中存储了数千张著名艺术品的图像。每个图像都有一些与之相关的艺术品信息,例如标题、艺术家、年份等。目前,这些信息存储在 Azure 表存储中,我在其中根据图像 ID 进行检索。
我有三个项目。一种是 .NET Framework 网站,一种是 .NET 6 网站。这两个网站都使用运行 .NET Framework 的第三个项目将文件上传到我们的 Azure blob 存储。
我有一些 Azure Function 的功能,其中包含用于 blob 事件订阅的事件网格。该代码在V1版本中运行良好。 net461任何CPU;x64 我正在尝试将其修改为 V2 (.NET Cor
我似乎收到了 403: HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authoriza
我似乎收到了 403: HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authoriza
当我尝试迭代 ListBlobs() 调用的结果时,出现“指定的资源不存在”异常。当我直接访问它时,我可以获取 blob 属性,但我正在尝试获取子目录中所有 blob 的列表。 我写了这个小测试来看看
我正在尝试从 Azure Blob 存储检索一些云对象,并且需要访问它们的元数据。在.Net Standard框架上这样做时,我可以使用以下方法: blob.FetchAttributes() 但是,
我是一名优秀的程序员,十分优秀!