• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 TaskHttpResponseMessage> 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)");

    TaskHttpResponseMessage> 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";
    }

    您可能感兴趣的文章:
    • C# HttpClient Cookie验证解决方法
    • 谈谈HttpClient使用详解
    • 通过HttpClient 调用ASP.NET Web API示例
    • .NET Core中使用HttpClient的正确姿势
    • .NET Core 2.1中HttpClientFactory的最佳实践记录
    • ASP.NET Core针对一个使用HttpClient对象的类编写单元测试详解
    • .NET Core中HttpClient的正确打开方式
    • Asp.Net Core2.1前后使用HttpClient的两种方式
    上一篇:ASP.NET 后台登录小技巧介绍
    下一篇:asp.net mvc路由篇 如何找到 IHttpHandler方法介绍
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    ASP.NET MVC Web API HttpClient简介 ASP.NET,MVC,Web,API,HttpClient,