使用 Web.config 文件中的 browserCaps 元素来定义浏览器的行为在 .NET Framework 2.0 中被否决,但仍受支持。此元素中的数据与浏览器定义文件 (.browser) 中的信息合并在一起。在本次学习将会连带.browser文件的相关内容

元素

说明

filter

可选的元素。

指定搜索字符串列表,通过这些字符串可以将各个设置分别应用于特定的浏览器定义。

result

指定 HttpCapabilitiesBase 派生类,该类用于保存分析 browserCaps 节所得的结果。这些功能针对各个浏览器存储为键/值字符串对。

此元素在 .NET Framework 2.0 版中仍然适用。

use

指定 HTTP 请求字符串,该字符串用于分析存储在 filter 和 case 元素中的浏览器功能信息。

另外filter包含子元素case,case中则是filter筛选过后保存的结果。结果以键值对形式,保存到result中执行的类型中。至于筛选的对象则是use元素中指定的HTTP头请求字段。

如下面的配置,定死了匹配的USER-AGENT包含Chrome/52.0.2743.116,那给浏览器的功能设置则是browser到cookies这部分信息。

<browserCaps><use var="HTTP_USER_AGENT"/><filter><case match="Chrome/52.0.2743.116">browser=Chromeversion=52majorver=52minorver=0hopegi=mr.hopegicookies=false</case></filter></browserCaps>

若想在代码中获取浏览器的功能,则通过下面的方式。

object cookies = Request.Browser.Cookies;cookies = Request.Browser["cookies"];var hg = Request.Browser["hopegi"];

按峰哥介绍的,*.broswer文件是用于给IIS判断当前发请求过来的浏览器的类型。而判断出这个浏览器类型之后,对响应或者响应内容作出不同的更改。如未识别的浏览器且默认浏览器对cookies则判定为不支持cookies,那在Forms认证时,验证票则不会通过cookie形式保存到浏览器,结果那浏览器有可能无法正常通过认证。

而*.browser文件是在.NET Framework2.0中推出的,例子如下

对User-Agent的匹配在userAgent match一节。对浏览器功能的定义在<capabilities>一节中。

预定义的浏览器定义文件存储在 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中。应用程序级别的浏览器定义文件可以放在应用程序的 App_Browsers 目录中。在这两个位置中,浏览器定义文件都必须具有 .browser 文件扩展名。不要更改 ASP.NET 随附的浏览器定义文件,因为 Service Pack 可能会更新这些文件,从而改写您所做的更改。相反,您应该创建新的 .browser 文件,并在新的 browser 定义中使用 parentID 属性来继承设置,或者使用 refID 属性向现有的浏览器定义添加功能。

在运行时,浏览器定义文件信息将合并到 BrowserCapabilitiesFactory 对象中的已知浏览器的集合内。发出请求时,ASP.NET 根据请求标头标识请求的浏览器,并编译一个与请求的浏览器类型相对应的 HttpBrowserCapabilities 对象。这一步是这样完成的:在开始时使用一个空字典,然后对浏览器定义树应用以下递归步骤:

  1. 从默认浏览器定义开始,默认浏览器定义始终被认为是一个成功的匹配。
  2. 将此浏览器定义中指定的功能值合并到此浏览器的功能字典中。浏览器定义中指定的值会重写父浏览器定义中设置的值。
  3. 计算每个子定义以确定是否匹配。对于每个匹配的子定义,重新从步骤 1 开始。在网关定义之后计算浏览器定义。如果用户代理匹配多个浏览器定义或多个网关定义,将会在运行时引发异常。

HttpBrowserCapabilities 对象被写入缓存,可以被来自同一类型的浏览器发出的其他请求再次使用。

对位于 App_Browsers 目录中的 .browser 文件所做的更改会使缓存无效,并且下一次请求将导致应用程序重新编译。但是,如果对 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中的 .browser 文件做出了更改,您必须使用 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_regbrowsers.exe 工具手动重新编译应用程序,或者使用 BrowserCapabilitiesCodeGenerator 类以编程方式重新编译应用程序。

总结一下,browserCaps 元素和browser文件都是为了定义浏览器的功能,对于浏览器而言,它把请求发往服务器,告知服务器自身信息是通过User-Agent请求头。而服务器断定请求来自于哪个浏览器甚至于当前发来请求的浏览器具备哪些功能,此时需要这个浏览器功能设置的配置信息。它按照请求头的信息(通常是User-Agent)匹配,匹配成功后断定浏览器的类型。从而也确定浏览器具备的功能。另外郁闷的是在应用程序目录中建的App_Browser文件夹中的browser文件都不生效。

参考

browserCaps 元素(ASP.NET 设置架构)

https://msdn.microsoft.com/zh-cn/library/sk9az15a(VS.80).aspx

浏览器定义文件架构(browsers 元素)

https://msdn.microsoft.com/zh-cn/library/ms228122(v=vs.80).aspx

转载于:https://www.cnblogs.com/HopeGi/p/5855268.html

browserCaps与浏览器功能设置相关推荐

  1. 如何打开计算机浏览器定位功能吗,如何在360浏览器中设置允许所有网站跟踪我的地理位置...

    如何在360浏览器中设置允许所有网站跟踪我的地理位置 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们在使用360浏览器的时候,想要设置允许所有的网站跟踪我的位置,该怎么操作呢?今天就跟大家介绍一下如何 ...

  2. 联想浏览器怎么设置使用Java_eclipse 联想功能设置技巧

    下面就列出配置eclipse联想功能(代码的提示功能)的步骤: 1. 打开eclipse,然后"window"→"preferences" 2. 选择" ...

  3. wxpython有哪些基本功能_用Python中的wxPython实现最基本的浏览器功能

    通常,大多数应用程序通过保持 HTML 简单来解决大多数浏览器问题 ― 或者说,根据最低共同特性来编写.然而,即便如此,也仍然存在字体和布局的问题,发行新浏览器和升级现有浏览器时,也免不了测试应用程序 ...

  4. QQ浏览器怎么设置主页 QQ浏览器设置默认主页教程

    为了更方便使用QQ浏览器,用户可以设置默认主页,这样下次打开就直接跳到需要的页面了,下面小编就为你介绍下QQ浏览器设置默认主页教程. QQ浏览器怎么设置主页: 首先打开QQ浏览器,点击浏览器右上角的三 ...

  5. 搜狗高速浏览器怎么设置页面字体 设置方法介绍

    搜狗高速浏览器是由搜狗公司开发的一款浏览器应用,我们在使用电脑或者手机等设备时都是离不开浏览器应用的,并且在很多浏览器中有的功能都是可以根据用户的使用习惯和喜好来设置的,就比如页面字体,所以小编今天就 ...

  6. QQ浏览器怎么设置为默认浏览器

    怎么将qq浏览器安装成自己想要的默认浏览器呢,今天小编就教大家一个方法,通过简单的方式,将qq浏览器设置成默认浏览器,这样用户在操作的时候就会更加的方便,打开浏览器就可以使用qq浏览器的功能,那么到底 ...

  7. 在python程序中嵌入浏览器_用Python中的wxPython实现最基本的浏览器功能

    通常,大多数应用程序通过保持 HTML 简单来解决大多数浏览器问题 ― 或者说,根据最低共同特性来编写.然而,即便如此,也仍然存在字体和布局的问题,发行新浏览器和升级现有浏览器时,也免不了测试应用程序 ...

  8. Edge浏览器兼容性设置,实用技巧,分享给你(2023新版)

    ​Edge浏览器兼容性设置是一项非常重要且实用的功能技巧,可以帮助小伙伴更好地访问那些需要特定浏览器设置或版本的网站和应用程序.在本文中,小编将简要介绍如何使用Edge浏览器兼容性设置,以便各位小伙伴 ...

  9. python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能

    本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...

最新文章

  1. pycharm中传入命令行参数
  2. sql server 补齐0学习总结
  3. 【常用算法总结——最短路径四种方法】
  4. 命令行解析的规则以及Command Line Parser Library
  5. .netcore mysql_.netcore基于mysql的codefirst
  6. nodejs集成sqlite
  7. RedHat停止维护CentOS!CentOS 创建者发起新项目,刚上线空白项目Star数已破两千
  8. 机器学习代码实战——KMeans(聚类)
  9. MyBatis源码阅读(七) --- 查询结果集封装流程
  10. war3 魔兽争霸3 双开 多开 联机 补丁 工具
  11. Greenplum数据库故障分析——UDP Packet Lost(packet reassembles failed)
  12. unity 裙子摆动_随风摆动的草丛——Unity shader graph 2D初探
  13. windows命令强制关闭登录用户
  14. 记录一下Python的11个小技巧
  15. flutter 保存图片或者视频到相册
  16. python课程介绍-Python简介
  17. “T3出行”产品体验分析报告
  18. 燕十八ajax笔记,燕十八商城笔记资料.doc
  19. Github每日精选(第56期):支持多语言的文字识别EasyOCR
  20. 又一波利好,FN难道又要起飞了?

热门文章

  1. CentOS 8安装Redis的两种方式
  2. Idea svn 新文件自动添加到版本控制
  3. linux下源码安装log4cxx
  4. Powershell: powershell 获取本机IP地址
  5. SSH安全登陆原理:密码登陆与公钥登陆
  6. 如何直接打开android系统的wifi设置页面,防止intent劫持
  7. 使用IE建多个会话的小技巧
  8. 无显示仍然发挥树莓派——VNCserver设定
  9. DataUml Design 介绍11 - DataUML 1.5版本功能-支持无Oracle客户端
  10. 【调试工具】之IOS真机测试