如何使用基于HttpClient和.net4的Rest-client进行身份验证

Tom*_*mas 40 .net authentication rest wcf

正在用HttpClient详细说明构建一个休息客户端.但我无法弄清楚,也找不到任何关于如何向服务器进行身份验证的示例.我很可能会使用基本的aut,但实际上任何一个例子都会受到赞赏.

在早期版本(在线示例)中,您做到了:

HttpClient client = new HttpClient("http://localhost:8080/ProductService/");
client.TransportSettings.Credentials =
    new System.Net.NetworkCredential("admin", "admin");
Run Code Online (Sandbox Code Playgroud)

但是TransportSettings,版本0.3.0中不再存在该属性.

Dun*_*art 93

所有这些都已过时.最后的方法如下:

var credentials = new NetworkCredential(userName, password);
var handler = new HttpClientHandler { Credentials = credentials };

using (var http = new HttpClient(handler))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用VS2013和.NET 4.5未设置授权标头.我只能通过属性直接设置标题.我还能错过什么? (5认同)
  • @Alex尝试设置`HttpClientHandler.PreAuthenticate = true`http://msdn.microsoft.com/en-us/library/system.net.http.httpclienthandler.preauthenticate.aspx (4认同)
  • 这是唯一适用于.NET 4.5的答案 (2认同)

Dar*_*ler 17

HttpClient库没有进入.Net 4.但是可以在http://nuget.org/List/Packages/HttpClient找到它.但是,在此版本的HttpClient中,身份验证的执行方式不同.

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization 
                   = new AuthenticationHeaderValue("basic","...");
Run Code Online (Sandbox Code Playgroud)

要么

var webRequestHandler = new WebRequestHandler();
CredentialCache creds = new CredentialCache();
creds.Add(new Uri(serverAddress), "basic",
                        new NetworkCredential("user", "password"));
webRequestHandler.Credentials = creds;
var httpClient = new HttpClient(webRequestHandler);
Run Code Online (Sandbox Code Playgroud)

并且要注意,这个库将在下周更新,并且会有一些细微的变化!


Ren*_*ené 9

我尝试了Duncan的建议,但在我的情况下没有用.我怀疑这是因为我正在集成的服务器,没有发送挑战或要求身份验证.它只是拒绝了我的请求,因为我没有提供Authorization标头.

所以我改为做了以下事情:

using (var client = new HttpClient())
{
    var encoding = new ASCIIEncoding();
    var authHeader = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(encoding.GetBytes(string.Format("{0}:{1}", "username", "password"))));
    client.DefaultRequestHeaders.Authorization = authHeader;
    // Now, the Authorization header will be sent along with every request, containing the username and password.
}
Run Code Online (Sandbox Code Playgroud)

请注意,此处的示例仅适用于基本身份验证.