游戏技术文章

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

时间:2017-2-25 11:46:20  作者:棋牌资源网  来源:棋牌资源网  查看:8955  评论:0
内容摘要:1. HttpClient简单介绍 依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssa...
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请求百度主页,貌似操作起来也挺方便的,运行输出请求得到的结果如下图:

ASP.NET_MVC_Web_API_学习笔记----HttpClient简介

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

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

ASP.NET_MVC_Web_API_学习笔记----HttpClient简介

 

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; 
ifstring.IsNullOrEmpty(contentType.CharSet)) 

   contentType.CharSet =  " GBK ";
}

 

标签:ASP.NETMVCWebAPI学习笔记 HttpClient简介 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2024 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved