• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

为 HttpClient 设置用户代理类型

武飞扬头像
冠军31
帮助3

在代理内部使用了 Microsoft Ajax 技术的 ASP.NET WebForm 页面的时候,比如说,SSRS 的页面,可能会遇到这样的错误

"`Sys.WebForms` is undefined in Chrome (latest version)"

实际的原因倒是很简单,ASP.NET 内部有一个识别客户端代理是否支持 Ajax 的机制,它依赖于客户端所使用的浏览器,内部是通过检查 User-Agent 这个请求头来判断的。对于 ASP.NET 不能识别的浏览器,它认为不能保证浏览器支持 Ajax。导致 ScriptManager 中没有包含 MicrosoftAjaxWebForms.js 。也就找不到这个 Sys.WebForms 了。

See: stackoverflow.com/questions/3…

解决的方式就是为 HttpClient 配置有效的 User-Agent 值。

ProductInfoHeaderValue 类型提速了请求头中 User-Agent 请求头的表示,该请求头的定义来自 IETF 的 RFC 2616 .

对于 ProductInfoHeaderValue 来说,请求头的名称已经是 User-Agnet 了,它需要提供一个 ProductHeaderValue 来作为这个 User-Agent 请求头的值。ProductHeaderValue 的 Name 提供了产品的名字,而 Version 提供了产品的版本信息。

如果不需要版本信息,可以如下进行配置。

var httpClient = new HttpClient();

httpClient.DefaultRequestHeaders.UserAgent.Add(
    new ProductInfoHeaderValue(
        new ProductHeaderValue("CNBlogs")));

为了方便,ProductInfoHeaderValue 还提供了一个直接使用字符串的构造函数。

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.Add(
    new ProductInfoHeaderValue("CNBlogs", null));

更简单的方式是绕过这个复杂的 ProductInfoHeaderValue 类型,直接提供一个字符串,让 System.Net.Http.Headers.HttpRequestHeaders 自己去解析它。DefaultRequestHeaders 的类型就是这个 HttpRequestHeaders。

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("User-Agent", "contact@cnblogs.com");

注意不要丢掉了中间的中划线 (-),

为了防止写错字符串,还可以使用 HeaderNames 这个静态泪的属性

public static readonly string UserAgent;

这样就变成了

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add(HeaderNames.UserAgent, "contact@cnblogs.com");

See: learn.microsoft.com/en-us/dotne…

参考

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfehifa
系列文章
更多 icon
同类精品
更多 icon
继续加载