Как читать мои пользовательские заголовки Flurl от HttpCall - PullRequest
0 голосов
/ 25 сентября 2019

Как я могу прочитать пользовательские заголовки, которые я надел на мой FlurlRequest throug WithHeader(string name, object value), а Authorization throug WithOAuthBearerToken(string token) из настроек HttpCall FlurlClient дает нам Func<HttpCall, Task> BeforeCallAsync()?

Я разработал наше решение с FlurlClient для динамической настройки самозаверяющих сертификатов и настраиваемой стратегии именования JSON. Ведь это обязательно для связи с этим сторонним API.

Я используюFlurl.Http 2.4.2.0

_flurlClient = new FlurlClient()
    .Configure(settings =>
    {
        settings.HttpClientFactory = new X509HttpFactory(
            _certificateConfiguration.PersonalInfoExchangePath,
            _certificateConfiguration.ClientSecret);
        settings.JsonSerializer = _thirdPartyApiJsonSerializer;
        settings.BeforeCallAsync = async (httpCall) =>
        {
            thirdPartyRequestIdentity = await _appThirdPartyRequestRepository.Insert(
                new ThirdPartyRequest
                {
                    AppRequestId = await _contextAccessor.GetRequestId(),
                    RawContent = JsonConvert.SerializeObject(
                        new
                        {
                            Method = httpCall.Request
                                .Method
                                .ToString(),
                            Content = httpCall.Request.Content != null
                                ? await httpCall.Request
                                    .Content
                                    .ReadAsStringAsync()
                                : null,
                            Headers = httpCall.Request
                                .Content?.Headers
                                .Where(h => h.Value != null)
                                .Select(h => new
                                {
                                    h.Key,
                                    Value = h.Value.ToArray()
                                })
                                .ToArray(),
                            httpCall.Request.RequestUri.AbsoluteUri,
                            httpCall.RequestBody,
                            EnvironmentHostname = await _environmentContext.GetHostname(),
                            EnvironmentAddressList = (await _environmentContext.GetAddressList())
                                .Select(a => a.ToString())
                        },
                        _recoveryJsonSerializerSettings),
                    Timestamp = DateTime.Now
                });
        };
    });

Мне нужно зарегистрировать все заголовки, но с этим кодом единственным заголовком, который я получаю, когда это применимо, является заголовок Content-Type.

1 Ответ

1 голос
/ 26 сентября 2019

Получите их от IFlurlRequest, а не от HttpRequestMessage.Другими словами, вместо этого:

httpCall.Request.Content?.Headers

используйте это:

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