如何使用system.net.http库正确添加HttpRequestHeaders

时间:2018-12-11 05:35:58

标签: c# azure-functions system.net

我使用 windows.web.http; 库创建了带有标头的HttpRequestMessage:

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);

注意::我尝试在 windows.web.http 上为它们手动设置相同的有效 SessionId ,但在 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: enter image description here system.net.http: enter image description here

谢谢。

2 个答案:

答案 0 :(得分:1)

system.net.http 的一个缺点是 不缓存请求。不发送的服务器 Cache-Control可能是潜在的问题。

答案 1 :(得分:1)

使用Fiddler调试请求后,我发现请求的cookie为空,因此我通过添加cookie而不是添加标题来解决此问题。

CookieContainer.Add(request.RequestUri, new Cookie("SESSION", SessionId));