zoukankan      html  css  js  c++  java
  • HTTP BASIC client端

    不同于之前的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验证方式。

  • 相关阅读:
    jquery 的 ajax 在 非阻塞 时返回 XMLHttpRequest
    关于TransactionScope出错:“与基础事务管理器的通信失败”的解决方法总结
    未能正确加载“radlangsvc.package,radlangsvc.vs,version=10.0.0,culture=neutra
    跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
    Windows8不联网直接安装.Net 3.5 Framework的方法
    ubuntu创建、删除文件及文件夹,强制清空回收站方法
    Ubuntu java 环境变量
    mysql 和mssql2016中的json字段相关操作
    Windows任务计划
    配置mysql远程访问
  • 原文地址:https://www.cnblogs.com/fx2008/p/2819623.html
Copyright © 2011-2022 走看看