ASP.NET MVC Web API HttpClient简介

 更新时间:2012年11月08日 11:57:29   作者:  
依稀还记得那个时候用WebClient,HttpWebRequest来发送一个请求,现在ASP.NET MVC4中自带了一个类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";
}

相关文章

  • ASP.NET Core如何注入多个服务实现类

    ASP.NET Core如何注入多个服务实现类

    这篇文章主要介绍了ASP.NET Core如何注入多个服务实现类的相关资料,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • Oracle中TO_DATE格式介绍

    Oracle中TO_DATE格式介绍

    Oracle中TO_DATE格式介绍;可供需求的朋友参考
    2012-11-11
  • .NET6新特性之 隐式命名空间引用

    .NET6新特性之 隐式命名空间引用

    本文给大家分享的是 .NET6特新 隐式命名空间引用,如果我们要在新加一个命名空间的引用,可以在项目文件中配置增加<Using Include="命名空间"/>,如果需要移除一个命名空间可以这么做<Using Remove="命名空间"/>,下面来看看文章详细介绍内容吧,需要的朋友可以参考一下
    2021-11-11
  • ASP.NET学习中常见错误总结归纳

    ASP.NET学习中常见错误总结归纳

    这篇文章主要介绍了asp.net学习过程中碰到的常见错误的解决方法,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2021-09-09
  • .NET新能源汽车锂电池检测程序UI挂死问题分析

    .NET新能源汽车锂电池检测程序UI挂死问题分析

    这篇文章主要为大家介绍了.NET新能源汽车锂电池检测程序UI挂死问题分析 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Net内存管理五大基础

    Net内存管理五大基础

    这篇文章主要给大家分享Net内存管理五大基础内容,文章讲围绕Net内存管理详细介绍文章内容,感兴趣的朋友可以参考一下,希望对你有所帮助
    2021-10-10
  • ASP.NET对Cookie的操作

    ASP.NET对Cookie的操作

    这篇文章介绍了ASP.NET操作Cookie的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • ASP.NET Core 中间件的使用之全局异常处理机制

    ASP.NET Core 中间件的使用之全局异常处理机制

    我们今天这篇文章就来说说代码异常问题怎么快速定位,减少不必要的时间浪费。异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止。下面雄安边将详细介绍,需要的朋友可以参考下
    2021-09-09
  • asp.net mvc路由篇 如何找到 IHttpHandler方法介绍

    asp.net mvc路由篇 如何找到 IHttpHandler方法介绍

    学习是使用asp.net已经有很长一段时间了,现在就来分析一下mvc的整过过程吧。个人计划写一个mvc系列的博文,仅从源代码的角度来分析mvc。在接触mvc时我们一定会经历路由,那么路由这东东是怎么搞出来的啊
    2012-11-11
  • C#中string与byte[]的转换帮助类-.NET教程,C#语言

    C#中string与byte[]的转换帮助类-.NET教程,C#语言

    在写c#程序时,string和byte[]之间的转换比较烦,在移植一些老程序时感觉很不好。我在c#中使用des和tripledes时移植一块老代码时也遇到了同样的情况。为了下次不为同样的事情烦恼,就写了下面的帮助类。
    2008-03-03

最新评论