博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP BASIC client端
阅读量:7208 次
发布时间:2019-06-29

本文共 1708 字,大约阅读时间需要 5 分钟。

不同于之前的HttpWebRequest类型,在.NET 4.5中新的HttpRequestHeaders类型直接有一个Authorization属性,对应类型是:AuthenticationHeaderValue,同样在System.Net.Http.Headers命名空间内。AuthenticationHeaderValue有两个属性Parameter和Scheme。为了弄清这两个参数在对Authorization属性的作用,我们可以做一个简单的测试:

首先得记得加入.NET 4.5中HttpClient相应的命名空间:

//+ using System.Net.Http;

//+ using System.Net.Http.Headers;

 

接着在DefaultRequestHeaders中设置AuthenticationHeaderValue,然后输出Authorization的值:

using (var http = new HttpClient())

{

    http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Mgen", "Orca");

    //通过HttpHeaders.GetValues获取值

    Console.WriteLine(String.Join(", ", http.DefaultRequestHeaders.GetValues("Authorization")));

}

 

输出:

Mgen Orca

 

原来Authorization属性会被设置成Scheme<空格>Parameter。

 

因此对于Basic验证,可以使用这样的方法来设置:

static async void doo()

{

    using (var http = new HttpClient())

    {

        SetBasicAuthorization(http.DefaultRequestHeaders, "mgen", "123456", Encoding.UTF8);

 

        //后续操作省略

    }

}

 

static void SetBasicAuthorization(HttpRequestHeaders header, string user, string pass, Encoding encoding)

{

    //Base64编码

    var data = Convert.ToBase64String(encoding.GetBytes(user + ":" + pass));

    //设置AuthenticationHeaderValue

    header.Authorization = new AuthenticationHeaderValue("Basic", data);

}

 

上面是通过设置AuthenticationHeaderValue的。当然.NET中的HttpRequestHeader同样允许直接修改原始的HTTP头数据,通过HttpRequestHeader.Add方法,当然这样很像.NET 4.5前的HttpWebRequest的设置方式:

static void SetBasicAuthorization(HttpRequestHeaders header, string user, string pass, Encoding encoding)

{

    //Base64编码

    var data = Convert.ToBase64String(encoding.GetBytes(user + ":" + pass));

    //通过HttpRequestHeaders.Add

    header.Add("Authorization", "Basic " + data);

}

 

上述都会正确设置HTTP请求头的Authorization字段为Basic验证方式。

转载于:https://www.cnblogs.com/fx2008/archive/2012/12/15/2819623.html

你可能感兴趣的文章
Swift @escaping @noescape
查看>>
Vert.x MySQLClient体验
查看>>
高性能消息中间件——NATS
查看>>
不好意思,观察者模式跟发布订阅模式就是不一样
查看>>
蒙了吗?offsetLeft、offsetWidth、scrollTop、scrollWidth、event.pageX
查看>>
直播的学习与使用-----采集
查看>>
老项目引入masonry后报错unrecognized selector sent to instance
查看>>
如果往错误的NEO地址转账会发生什么
查看>>
2018 年终总结
查看>>
如何使用Gitbook创建html技术文档
查看>>
GDB 调试 Mysql 实战(一)源码编译安装
查看>>
理解AJAX
查看>>
通信类
查看>>
Android4.4 及以下TextView,Button等控件使用矢量图报错
查看>>
浏览器回流认识
查看>>
react生命周期
查看>>
质因子分解
查看>>
Django搭建个人博客:文章标签功能
查看>>
Docker学习笔记
查看>>
61. Rotate List
查看>>