使用 Web.config 文件中的 browserCaps 元素来定义浏览器的行为在 .NET Framework 2.0 中被否决,但仍受支持。此元素中的数据与浏览器定义文件 (.browser) 中的信息合并在一块儿。在本次学习将会连带.browser文件的相关内容 web
元素编程 |
说明浏览器 |
filter缓存 |
可选的元素。 服务器 指定搜索字符串列表,经过这些字符串能够将各个设置分别应用于特定的浏览器定义。cookie |
result架构 |
指定 HttpCapabilitiesBase 派生类,该类用于保存分析 browserCaps 节所得的结果。这些功能针对各个浏览器存储为键/值字符串对。 工具 此元素在 .NET Framework 2.0 版中仍然适用。学习 |
usespa |
指定 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=Chrome version=52 majorver=52 minorver=0 hopegi=mr.hopegi cookies=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 对象。这一步是这样完成的:在开始时使用一个空字典,而后对浏览器定义树应用如下递归步骤:
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