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

How to properly add HttpRequestHeaders using system.net.http library

我用 header 使用 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 47=] 没问题,但在 system.net.http 上未经授权。

我如何初始化我的 HttpClient:

private HttpClientHandler handler;
handler = new HttpClientHandler();

private HttpClient _client;
_client = new HttpClient(handler)

参考Link: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

请求Header格式:
windows.web.http: system.net.http:

谢谢。

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

在使用Fiddler调试请求后,我发现我请求的cookie是空的,所以我通过添加cookie而不是添加header来解决这个问题。

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