Как правильно добавить HttpRequestHeaders с помощью библиотеки system.net.http

Я создал HttpRequestMessage с заголовком, используя библиотеку windows.web.http;:

var request = base.CreateHttpRequestMessage();
        request.Headers.Add("SESSION", SessionId);
        return request;

и после отправки SendRequestAsync (); , Я могу успешно получить ответ.

Но в моем случае мне нужно использовать библиотеку system.net.http; с такими же кодами:

var request = base.CreateHttpRequestMessage();
        request.Headers.Add("SESSION", SessionId);
        return request;

но когда я вызываю SendAsync (); , Я получаю несанкционированный ответ. Кто-нибудь знает, что вызывает проблему?

var source = new CancellationTokenSource(timeout)
var response = await _client.SendAsync(request, source.Token)
                    .ConfigureAwait(false);

ПРИМЕЧАНИЕ. Я попытался вручную установить один и тот же действительный SessionId для обоих, на windows.web.http все нормально, но на system.net .http неавторизованный.

Как я инициализирую свой HttpClient:

private HttpClientHandler handler;
handler = new HttpClientHandler();

private HttpClient _client;
_client = new HttpClient(handler)

Ссылка: https://docs.microsoft.com/en-us/dotnet/api/system.net.http?view=netframework-4.7.2
https://docs.microsoft.com/en-us/uwp/api/windows.web.http

Формат заголовка запросов:
windows.web.http: введите описание изображения здесь system.net.http:  введите описание изображения здесь

Спасибо.


person Community    schedule 11.12.2018    source источник
comment
Насчет use system.net.http, вы хотите использовать system.net.http.HttpClient?   -  person Jerry Liu    schedule 11.12.2018
comment
@JerryLiu да ...   -  person    schedule 11.12.2018
comment
Итак, вы написали код с использованием HttpClient, но получили UnAuthorized? Не могли бы вы опубликовать свой код с помощью HttpClient, со своей стороны я мог бы успешно получить заголовок сеанса.   -  person Jerry Liu    schedule 11.12.2018
comment
при вызове HttpClient.SendAsync (); , наша служба api возвращает неавторизованные, даже если я добавил действительный сеанс в заголовок   -  person    schedule 11.12.2018
comment
обновил вопрос, приложил скриншот запроса   -  person    schedule 11.12.2018
comment
Возможно ли, что проблема связана с тем, как служба api обрабатывает запрос?   -  person Jerry Liu    schedule 14.12.2018
comment
@JerryLiu, да, это возможно, но меня смущает, почему в библиотеке windows.web.http она работает нормально.   -  person    schedule 14.12.2018


Ответы (2)


После отладки запроса с помощью Fiddler я обнаружил, что файл cookie моего запроса имеет значение null, поэтому я исправил это, добавив файл cookie вместо добавления заголовка.

CookieContainer.Add(request.RequestUri, new Cookie("SESSION", SessionId));
person Community    schedule 17.12.2018

Одним из недостатков system.net.http является то, что запросы не кэшируются. Сервер, который не отправляет Cache-Control, может быть потенциальной проблемой.

person Laci R    schedule 11.12.2018
comment
Привет, спасибо, не могли бы вы подробнее рассказать? - person ; 11.12.2018
comment
обновил вопрос, приложил скриншот запроса - person ; 11.12.2018