Невозможно получить доступ к удаленному объекту в классе DelegatingHandler для HttpClient - PullRequest
1 голос
/ 26 июня 2019

Я использую 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'."Что здесь происходит?

Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...