Я использую 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);
}
}
В основном приложении ASP.NET, использующем автофак, я зарегистрировал такие типы:
// Token cache
builder.RegisterType<TokenCache>().As<ITokenCache>()
.WithParameter("scope", "Scope")
.SingleInstance();
builder.RegisterType<TokenHttpHandler>()
.InstancePerLifetimeScope();
builder.RegisterType<ProductionHttpClient>()
.As<HttpClient>()
.InstancePerLifetimeScope();
Проблема в том, что только код попадает в строку:
return await base.SendAsync (request, cancellationToken) .ConfigureAwait (false);
Я получаю сообщение об ошибке:
"Невозможно получить доступ к удаленному объекту. \ r \ nИмя объекта: 'TokenHttpHandler'."Что здесь происходит?
Что мне здесь не хватает?