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简介

 

 

时间: 2024-10-27 15:52:38

ASP.NET MVC Web API 学习笔记----HttpClient简介的相关文章

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

本章节简单介绍一下使用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/

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

1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP)  2. ASP.NET

ASP.NET MVC &amp; Web API Brief Introduction

Pure Web Service(ASMX): Starting back in 2002 with the original release of .NET, a developer could fairly easily create an ASP.NETASMX-based XML web service that allowed other .NET and non-.NET clients to call it.Those web services implemented variou

ASP.NET MVC 3 Framework学习笔记之Model Templates

.使用模板化的视图Helpers(Using Templated View Helpers) 模版化视图helpers的创意就是它们更加灵活.我们不用自己去指定应该用什么HTML元素来呈现一个模型的属性,MVC自己会搞定,在我们更新了视图模型时,也不用手动的更新视图.下面是一个例子:  代码如下 复制代码 //在Models里面添加Persons.cs using System; using System.Collections.Generic; using System.Linq; using

asp.net mvc web api问题

问题描述 <script>functiontest(){varno={no:"SPH"};$.ajax({type:'POST',url:'/API/B2B/GetNo',data:JSON.stringify(no),//date:{"":"SPH"},success:function(msg){alert(msg);}})}</script> 上边是htmljs代码,下边是类publicclassNo{publicst

ASP.NET中Web API的简单实例_实用技巧

一.Web API的路由 1.在Visual Studio中新建MVC4项目,在App_Start目录下有一个WebApiConfig.cs文件,这个文件中就是相应的Web API的路由配置了. 2.Web API 框架默认是基于 Restful 架构模式的,与ASP.NET MVC 有区别的是,它会根据 Http 请求的 HttpMethod(Get.Post.Put.Delete)来在Controller 中查找 Action,规则是:Action 名中是否以Get.Post 开头?Acti

Windows录音API学习笔记--转

Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct {     WORD      wMid; 用于波形音频输入设备的设备驱动程序制造商标识符.     WORD      wPid; 声音输入设备的产品识别码.     MMVERSION vDriverVersion; 用于波形音频输入设备的设备驱动程序的版本号.高位字节是主版本号,低字节是次版本号.     CHAR      szPna

Web Service学习笔记:动态调用WebService

原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我们可能需要在程序运行期间动态调用一个未知的服务.在 .NET Framework 的 System.Web.Services.Description 命名空间中有我们需要的东西. 具体步骤: 1. 从目标 URL 下载 WSDL 数据. 2. 使用 ServiceDescription 创建和格式化 WSDL

ASP.NET MVC 4 Web API 学习 正确返回JSON数据方法

web api 本来就可以返回json格式的,为什么我们要还对它做一些修改呢? 因为web api默认返回的是xml,在提交请求的是设置了 Content-Type: application/json; 返回的才是JSON格式的数据!  但是怎么做到让它只是返回JSON格式的数据呢? 有时候就会遇到这种需求!  这是我最开始的做法] public static void Register(HttpConfiguration config)         {             config