好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ASP.NET MVC Web API 学习笔记HttpClient简介

ASP.NET MVC Web API 学习笔记HttpClient简介

1. HttpClient简单介绍 

依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage。

问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NET Framework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处:

(1) 可以在HttpClient实例上配置扩展,设置默认的头部,取消未完成的的请求和设置

(2) HttpClient有自己的连接池

(3) HttpClient 不与特定的服务器绑定,可以访问任何Http请求

(4) HttpClient采用异步请求处理

2. HttpClient备注说明

HttpClient 包含在 System.net.Http.dll  程序集中,用户接受和发送 http 请求,该类适用于 .NET4.0 以上版本。

默认情况下, HttpWebRequest   将用于向服务器发送请求。 此行为可指定一个不同的通道修改在获取  HttpMessageHandler   实例的构造函数重载之一中作为参数。 如果需要与身份验证的功能或缓存, WebRequestHandler   可用于配置设置,而实例可传递给构造函数。 返回的处理程序传递到采用  HttpMessageHandler   参数的构造函数重载之一
 更多说明可以参考微软官方网站:

http://msdn.microsoft.com/zh-cn/library/system.net.http.httpclient.aspx

3. HttpClient基本操作

static   void  BasicMethod()
{
             string  url =  " http://www.baidu.com " ;
            HttpClient client =  new  HttpClient();
             string  content = client.GetStringAsync(url).Result;
            Console.WriteLine(content);  

}

以上是使用HttpClient请求百度主页,貌似操作起来也挺方便的,运行输出请求得到的结果如下图:

 

 控制台输出的为请求URL的内容。

HttpClient除了上面提到的GetStringAsync()方法之外,还提供了如下Get方法,详细可以参考MSDN:

 

4. 自定义请求头

如果要自定义请求头,我们需要继承一个类:HttpClientHandler 

      public   class  GitHttpClientHandler:HttpClientHandler

    {
         protected   override  Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            request.Headers.Referrer =  new  Uri( " http://www.google.com/ " );
            request.Headers.Add( " UserAgent " ,  " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727) " );
            
            Task<HttpResponseMessage> task =  base .SendAsync(request, cancellationToken);
            HttpResponseMessage response = task.Result;
            MediaTypeHeaderValue contentType = response.Content.Headers.ContentType;
             if  ( string .IsNullOrEmpty(contentType.CharSet))
            {
                contentType.CharSet =  " GBK " ;
            }
             return  task;
        }
    }

 HttpClientHandler就是常见的代理模式,在HttpClient.GetStringAsync()加了一层封装,拦截了HttpClient的输入和输出,从而实现一些自定义的操作,这种方式我们在MVC 中非常常见,就是MVC中的过滤器。

5. 请求内容过长

HttpClient有一个属性 MaxResponseContentBufferSize,它表示读取相应内容是最大的字节缓存数,默认值是64K,当页面内容很多的时候,超过64K则会抛出异常HttpRequestException,导致Get失败。

我们可以人工设置这个属性的大小:

HttpClient client =  new  HttpClient() { MaxResponseContentBufferSize =  1024  *  1024  }; 

 使用如上方式处理即可。

6. 中文问题 

 中文问题总是令人头疼,很多时候会出现乱码。上面提到的自定义请求头也可以处理,这里贴出一段代码作参考,中文问题有点复杂需要根据具体情况处理:

HttpResponseMessage response = task.Result;
MediaTypeHeaderValue contentType = response.Content.Headers.ContentType;
if ( string .IsNullOrEmpty(contentType.CharSet))
{
   contentType.CharSet =  " GBK " ;

7. 友情链接 

  ASP.NET MVC Web API 学习笔记---第一个Web API程序

ASP.NET MVC Web API 学习笔记---联系人增删改查

ASP.NET MVC Web API 学习笔记----HttpClient简介

 

分类:  Web API 学习笔记

标签:  asp.net ,  mvc ,  C# ,  web api ,  HttpClient

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于ASP.NET MVC Web API 学习笔记HttpClient简介的详细内容...

  阅读:52次