ASP.NETMVCWebAPIHttpClient简介
ASP 简介
2023-06-13 09:14:40 时间
1.HttpClient简单介绍
依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NETMVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage。
问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NETFramework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处:
(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基本操作
复制代码代码如下:
依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NETMVC4中自带了一个类HttpClient,用于接收HttpResponseMessage和发送HttpRequestMesssage。
问题在于既然WebClient,HttpWebRequest可以完成相应的功能,为什么还要使用HttpClient类,.NETFramework中既然提出了这样一个类肯定是有其特别之处的,这里罗列几个不同之处:
(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基本操作
staticvoidBasicMethod()
{
stringurl="http://www.baidu.com";
HttpClientclient=newHttpClient();
stringcontent=client.GetStringAsync(url).Result;
Console.WriteLine(content);
}
以上是使用HttpClient请求百度主页,貌似操作起来也挺方便的,运行输出请求得到的结果如下图:
控制台输出的为请求URL的内容。
HttpClient除了上面提到的GetStringAsync()方法之外,还提供了如下Get方法,详细可以参考MSDN:
4.自定义请求头
如果要自定义请求头,我们需要继承一个类:HttpClientHandler
publicclassGitHttpClientHandler:HttpClientHandler
{
protectedoverrideTask<HttpResponseMessage>SendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken)
{
request.Headers.Referrer=newUri("http://www.google.com/");
request.Headers.Add("UserAgent","Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.1;WOW64;Trident/5.0;SLCC2;.NETCLR2.0.50727)");
Task<HttpResponseMessage>task=base.SendAsync(request,cancellationToken);
HttpResponseMessageresponse=task.Result;
MediaTypeHeaderValuecontentType=response.Content.Headers.ContentType;
if(string.IsNullOrEmpty(contentType.CharSet))
{
contentType.CharSet="GBK";
}
returntask;
}
}
HttpClientHandler就是常见的代理模式,在HttpClient.GetStringAsync()加了一层封装,拦截了HttpClient的输入和输出,从而实现一些自定义的操作,这种方式我们在MVC中非常常见,就是MVC中的过滤器。
5.请求内容过长
HttpClient有一个属性MaxResponseContentBufferSize,它表示读取相应内容是最大的字节缓存数,默认值是64K,当页面内容很多的时候,超过64K则会抛出异常HttpRequestException,导致Get失败。
我们可以人工设置这个属性的大小:
HttpClientclient=newHttpClient(){MaxResponseContentBufferSize=1024*1024};
用如上方式处理即可。
6.中文问题
中文问题总是令人头疼,很多时候会出现乱码。上面提到的自定义请求头也可以处理,这里贴出一段代码作参考,中文问题有点复杂需要根据具体情况处理:
HttpResponseMessageresponse=task.Result;
MediaTypeHeaderValuecontentType=response.Content.Headers.ContentType;
if(string.IsNullOrEmpty(contentType.CharSet))
{
contentType.CharSet="GBK";
}
相关文章
- .net安装 Linux 上的 ASP.NET 环境(linux安装asp)
- ASP编程操作MySQL数据库(asp访问mysql)
- 关于ASP操作Access数据库时出现死锁.ldb的解决方法
- 基于ASP和MSSQL的数据查询技术(aspmssql查询)
- 使用ASP连接MySQL实现数据库应用(asp连接空间mysql)
- 教你如何用ASP连接MySQL(asp连接mysql教程)
- ASP将MySQL数据迁移到新环境(asp迁移mysql)
- 如何使用ASP添加MySQL引用(asp添加mysql引用)
- 数据ASP解析MySQL中文数据实现无缝互联(asp接受mysql中文)
- ASP与MySQL的联合开发实现轻松跨平台互联网应用(asp和mysql)
- ASP搭配MySQL使用的缺点及解决办法(asp使用mysql缺点)
- 用ASP编写MySQL数据库程序简单又高效(asp使用mysql代码)
- 数据库ASP连接Oracle数据库简单实现实时数据访问(asp连续oracle)
- asp模板引擎终结者(WEB开发之ASP模式)
- ASP下的简洁的多重查询的方法与函数真不错
- asp.net窗体操作总结
- asp随机字符串函数
- ASP.NETGlobal.asax应用程序文件简介
- asp之自动闭合HTML/ubb标签函数附简单注释
- asp.net配置会话状态Session实现代码
- ASP.NET笔记之文章发布管理小系统案例
- asp.net后台关闭当前页面并传值的两种方法
- ASP.NET入门之HTML服务器控件概述