C#/.NET应用程序编程开发中如何设置HttpClient的头部授权信息?

C#开发 作者: Rector 39 次阅读 · 读完约需 2 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在C#/.NET的应用程序编程开发中,经常会使用HttpClient这个类来处理有关Http请求的相关操作,比如可以向远程服务接口发送Http请求以获取或者提交相关数据。

常规情况下,远程服务接口为了保护接口数据,一般都会设置用户身份验证,那么使用HttpClient时,我们如何设置头部的用户身份授权信息呢?

方案一

HttpClient类提供了一个DefaultRequestHeaders成员,可以通过设置DefaultRequestHeaders成员的Authorization属性来设置HttpClient的授权信息,比如要设置一个基于Bearer的授权信息:

httpClient.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "Your Oauth token");

或者要设置一个基于Basic的授权信息:

request.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue(
        "Basic", Convert.ToBase64String(
            System.Text.ASCIIEncoding.ASCII.GetBytes(
               $"{yourusername}:{yourpwd}")));

方案二

或者使用DefaultRequestHeadersAdd()方法,如:

using (var client = new HttpClient())
{
    var url = "https://xxx.com/api/identity/v1";
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    var response = await client.GetStringAsync(url);
}

方案三

一个详细设置基于Basic的身份授权信息的示例,如:

using (var client = new HttpClient())
{
    var webUrl ="http://localhost/saleapi/api/";
    var uri = "api/sales";
    client.BaseAddress = new Uri(webUrl);
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.ConnectionClose = true;

    //设置基于Basic的用户授权信息
    var user = "username";
    var password = "password";
    var base64String =Convert.ToBase64String( Encoding.ASCII.GetBytes($"{user}:{password}"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",base64String);

    var result = await client.PostAsJsonAsync(uri, model);
    return result;
}

方案四

一个比较详细的设置基于Bearer的身份授权信息的示例,如:

using (HttpClient httpClient = new HttpClient())
{
   Dictionary<string, string> tokenDetails = null;
   var messageDetails = new Message { Id = 4, Message1 = des };
   HttpClient client = new HttpClient();
   client.BaseAddress = new Uri("http://localhost:3774/");
   var login = new Dictionary<string, string>
       {
           {"grant_type", "password"},
           {"username", "sa@role.com"},
           {"password", "lopzwsx@23"},
       };
   var response = client.PostAsync("Token", new FormUrlEncodedContent(login)).Result;
   if (response.IsSuccessStatusCode)
   {
      tokenDetails = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.Content.ReadAsStringAsync().Result);
      if (tokenDetails != null && tokenDetails.Any())
      {
         var tokenNo = tokenDetails.FirstOrDefault().Value;
         client.DefaultRequestHeaders.Add("Authorization", "Bearer " + tokenNo);
         client.PostAsJsonAsync("api/menu", messageDetails)
             .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
      }
   }
}

温馨提示:本文标注有(完整示例)的示例代码可以直接在try.dot.net运行。

阅读了该文章的人还浏览了...

本文永久链接码友网 » C#/.NET应用程序编程开发中如何设置HttpClient的头部授权信息?

发布于: 2019-06-17 15:22:28
分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册