C# 传递凭据适用于WebRequest,但不适用于HttpClient
我正在尝试使用HttpClient将凭据传递回web服务。 然而,我不断收到未经授权的请求。 但是,当我尝试使用WebRequest时,它会进行身份验证吗 HttpClient:C# 传递凭据适用于WebRequest,但不适用于HttpClient,c#,.net,http,dotnet-httpclient,C#,.net,Http,Dotnet Httpclient,我正在尝试使用HttpClient将凭据传递回web服务。 然而,我不断收到未经授权的请求。 但是,当我尝试使用WebRequest时,它会进行身份验证吗 HttpClient: var handler = new NativeMessageHandler { UseDefaultCredentials = true, Credentials = credential }; var c
var handler = new NativeMessageHandler
{
UseDefaultCredentials = true,
Credentials = credential
};
var client = new HttpClient(handler);
var content = _httpClientHelper.Serialize(data);
var response = await _client.PostAsync($"{_baseurl}/api/foos/List", content);
WebRequest:
HttpResponseMessage response = null;
try
{
var data = JsonConvert.SerializeObject(new
{
ViewTitle = "New",
PageCount = 60
});
var content = _httpClientHelper.Serialize(data);
using (var client = new WebClient { UseDefaultCredentials = true, Credentials = credentials })
{
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
client.UploadData("$"{baseurl}/api/foos/List", "POST", Encoding.UTF8.GetBytes(content));
}
我不明白为什么一个有效,另一个无效。
如前所述,对此的任何帮助或见解都将不胜感激,HttpClient的这种行为可能是因为HttpClientHandler是如何实现的
“[…]StartRequest方法在新线程中使用asp.net进程的凭据(而不是模拟用户的凭据)执行[…]”
您可能会看到HttpClient和WebClient行为上的差异,因为
“HttpClient创建新线程
另一方面,通过TaskFactory.WebClient同步运行
在同一线程上,从而转发其
凭据(即模拟用户的凭据)。”
如果您正在提供凭据,那么您不应该设置
UseDefaultCredentials=false
?