我正在将TokenHttpHandler用于HttpClient。看起来像这样。
public class TokenHttpHandler : DelegatingHandler
{
private readonly ITokenCache tokenCache;
private readonly IHttpProxyClientService proxyClientService;
public TokenHttpHandler(IHttpProxyClientService proxyClientService, ITokenCache tokenCache)
{
this.proxyClientService = proxyClientService;
this.tokenCache = tokenCache;
var useProxy = AppSettingsProvider.AppSettings.Proxy.UseProxy;
InnerHandler = useProxy ? proxyClientService.GetProxyHandler() : new HttpClientHandler();
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await SetAuthHeaderAndSendAsync(request, cancellationToken, false).ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.Unauthorized)
{
response = await SetAuthHeaderAndSendAsync(request, cancellationToken, true);
}
return response;
}
private async Task<HttpResponseMessage> SetAuthHeaderAndSendAsync(HttpRequestMessage request, CancellationToken cancellationToken, bool forceTokenRefresh)
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await tokenCache.GetAccessToken(forceTokenRefresh).ConfigureAwait(false));
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
}
在使用autofac的ASP.NET核心应用程序中,我注册了类似的类型:
// Token cache
builder.RegisterType<TokenCache>().As<ITokenCache>()
.WithParameter("scope", "Scope")
.SingleInstance();
builder.RegisterType<TokenHttpHandler>()
.InstancePerLifetimeScope();
builder.RegisterType<ProductionHttpClient>()
.As<HttpClient>()
.InstancePerLifetimeScope();
问题在于,因为只有代码才行:
返回等待基地。SendAsync(请求,取消令牌).ConfigureAwait(假);
我收到错误消息:
“无法访问已处置的对象。\ r \ n对象名称:'TokenHttpHandler'。” 这是怎么回事?
我在这里想念什么?