我正在尝试添加用于依赖项注入的 blob 服务客户端。我正在使用最新版本的Microsoft.Extensions.Azure
,但是我的服务集合不包含 的扩展方法AddAzureClients
。服务集合的类型为Microsoft.Extensions.DependencyInjection.IServiceCollection
。
通过在线研究,我还没有真正找到任何关于这个问题的信息。我不确定我在这里做错了什么。可能我缺少一些非常简单的东西!
using Microsoft.Extensions.Azure;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace MY.API
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddAzureClients(builder => // IServiceCollection does not contain a definition for AddAzureClients
{
builder.AddBlobServiceClient(Configuration.GetConnectionString("BlobStorage"));
});
}
}
}
Run Code Online (Sandbox Code Playgroud) MultiPartContent
我试图通过返回响应来从服务器加载大量数据。但是,在该HttpGet
方法期间,我设置的超时值将被忽略。我正在尝试设置更长的超时,因为在这种情况下等待是可以的。
我尝试过 10 分钟到 2 小时之间的各种超时值。实际上,用户第一次使用我们的应用程序时只需等待约 5 分钟,其他时候等待的时间会更少。我还尝试存储 HttpClient 的引用,以确保 api.HttpClient 不会每次都重新创建 HttpClient 对象。
var handler = new HttpClientHandler();
var progress = new ProgressMessageHandler(handler);
var api = APIHelpers.GetSession(progress);
progress.HttpReceiveProgress += (e, args) => ProgressChanged.Invoke(e, new SyncEventArgs(GlobalEnums.SyncStage.Downloading, args.ProgressPercentage * 0.01f));
api.HttpClient.Timeout = new TimeSpan(0, 10, 0);
var downloadUri = BuildURI();
var response = await api.HttpClient.GetAsync(downloadUri, HttpCompletionOption.ResponseHeadersRead);
Run Code Online (Sandbox Code Playgroud)
我希望应用程序在抛出超时异常之前等待 10 分钟,但异常是在 100 秒后抛出的(我相信这是默认值?)。设置后检查该HttpClient.Timeout
值确实表明它设置正确。
该APIHelpers.GetSession()
方法返回一个带有创建的授权标头的 API 对象。该HttpClient
对象可通过继承的类访问。这是由 Swashbuckle 和 Swagger 创建的。我api.HttpClient.Timeout = x
之前已经成功使用过这种方式,所以我认为这不是问题。它似乎特别针对这种情况。 …