C# 如何使用system.net.http库正确添加HttpRequestHeader

C# 如何使用system.net.http库正确添加HttpRequestHeader,c#,azure-functions,system.net,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 r

我使用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上手动为两个设置相同的有效会话ID,但在system.net.http上未经授权

如何初始化HttpClient:

private HttpClientHandler handler;
handler = new HttpClientHandler();

private HttpClient _client;
_client = new HttpClient(handler)
参考链接:

请求标头格式:
windows.web.http: system.net.http:


谢谢。

system.net.http的一个缺点是 不缓存请求。不发送消息的服务器
缓存控制
可能是一个潜在的问题。

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

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

关于
使用system.net.http
,您的意思是使用
system.net.http.HttpClient
?@JerryLiu是的…所以您使用HttpClient编写了代码,但未经授权?您是否可以使用HttpClient发布代码,在我这方面,我可以成功获取会话头。调用HttpClient.SendAsync(),我们的api服务返回未经授权,甚至我在标题上添加了有效会话更新了问题,附上了请求的屏幕截图嗨,谢谢,你能详细说明一下吗?更新了问题,附上了请求的屏幕截图