Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递凭据适用于WebRequest,但不适用于HttpClient_C#_.net_Http_Dotnet Httpclient - Fatal编程技术网

C# 传递凭据适用于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

我正在尝试使用HttpClient将凭据传递回web服务。 然而,我不断收到未经授权的请求。 但是,当我尝试使用WebRequest时,它会进行身份验证吗

HttpClient:

        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