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"; } from:http://www.cnblogs.com/qingyuan/archive/2012/11/08/2760034.html
View Details本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查。目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的。下面我们通过创建一个简单的Web API来管理联系人 说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟 1. Web API中包含的方法 Action HTTP method Relative URI GetAllContact GET /api/contact GetContact GET /api/contact /id GetListBySex GET /api/contact?sex=sex PostContact POST /api/contact PutContact PUT /api/contact/id DeleteContact DELETE /api/contact/id http 四个主要的处理方法(get,put,post,delete)能够用来处理匹配增删改查操作: Get 可以在服务端检索匹配URI匹配的资源,不会对服务器数据进行修改操作 Put 用户修改URI指定的特定资源,如果服务端允许,Put 也可以用户创建新的资源 Post 可以用于创建一个资源。服务端会为这个资源创建一个新的URI,并且将这个资源作为ResposeMessage 的一部分返回 Delete 用户删除URI匹配的资源 2. 创建一个工程 (1) 启动VS2012,在已经安装的模板中选择ASP.NET MVC4 Web 应用程序,单击确定 (2) 在ASP.NET MVC 4 项目对话框中选择 Web API,单击确定 (3) 添加一个Model,工程选择Models文件夹右键添加一个实体类,代码如下 public class Contact { public int ID { get; set; } public string Name { get; set; } public string Sex { get; set; } public DateTime Birthday { get; set; } public int Age { get; set; } } (4) 添加一个数据操作接口 public interface IContactRep { /// <summary> /// 查询所有 /// </summary> /// <returns></returns> IEnumerable<Contact> GetListAll(); /// <summary> /// 根据ID查询 /// </summary> /// <param name="id"></param> /// <returns></returns> Contact GetByID(int id); /// <summary> /// 添加 /// </summary> /// <param name="contact"></param> /// <returns></returns> Contact Add(Contact contact); /// <summary> /// 根据ID删除 /// </summary> /// <param name="id"></param> void Remove(int id); /// <summary> /// 修改 /// </summary> /// <param name="contact"></param> /// <returns></returns> […]
View Details1. Web API简单说明 近来很多大型的平台都公开了Web API。比如百度地图 Web API,做过地图相关的人都熟悉。公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验。所以我相信Web API会越来越有它的用武之地。 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP) 2. ASP.NET Web API简介 ASP. NET Web API支持让你能够轻松地创建功能强大的 Web API,可以从范围广泛的客户端 (包括使用 JavaScript从浏览器中,到任何移动/客户端平台上的本机应用程序)访问。它提供以下支持: (1)现代 HTTP 的编程模型:在你的 Web 应用程序中直接访问和处理 HTTP 请求并响应,使用清洁、 强类型的 HTTP 对象模型。除了在服务器上支持这个 HTTP 的编程模型之外,通过使用新的 HttpClient API来从任何.NET 应用程序中调用 Web ApI,我们也支持客户端中相同的编程模型。 (2)内容协商: Web API 有对内容协商的内置支持 — — 这使客户端和服务器一起工作以决定从一个 API 返回的正确的数据格式。我们为JSON、 XML 和Form URL 编码的格式提供默认支持,并可以通过添加你自己的格式化程序来扩展这种支持,或者甚至用你自己的来替换默认的内容协商策略。 (3)查询组成: Web API 通过 OData URL 公约使你能够轻松地支持查询。当你从你的 Web API 返回一种类型的 IQueryable <T> 时,框架将自动为它提供 OData 查询支持— — 使其易于分页和排序。 (4)模型绑定和验证:模型绑定器提供了一种简单的方法来从HTTP 请求中的不同部分提取数据,并将这些信息部分转换为Web API行为可使用的.NET对象。Web API 支持相同的模型绑定和ASP. NET MVC 现今支持的验证基础结构。 (5)路由: Web ApI 支持完整的路由功能集。现今ASP. NET MVC […]
View Details