使用 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=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 对象。这一步是这样完成的:在开始时使用一个空字典,然后对浏览器定义树应用以下递归步骤:

  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

browserCaps与浏览器功能设置的更多相关文章

  1. 如何用Folx的浏览器集成功能设置捕获类型

    Folx的浏览器集成功能,可将Folx的下载功能添加到浏览器的上下文菜单(也就是右键快捷菜单)中,方便用户使用Folx捕获页面中的下载链接,并创建下载任务. 那么,用户需要进行哪些设置才能使用Folx ...

  2. [转]保护眼睛的Windows和IE、Firefox、谷歌等浏览器颜色设置

    保护眼睛的Windows和IE.Firefox.谷歌等浏览器颜色设置  长时间在电脑前工作,窗口和网页上的白色十分刺眼,眼睛很容易疲劳,也容易引起头痛,其实我们可以通过设置Windows窗口和软件的颜 ...

  3. 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片

    InfoPath 的浏览器表单不支持加载并显示图片,当然在模板中可以插入图片,但是如果想显示数据库的一幅图片,或是动态加载一张图片就无能为力了. 基实这个问题可以通过在浏览器表单中使用: " ...

  4. android 下 利用webview实现浏览器功能

    android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...

  5. Jexus高级功能设置

    我们对服务器软件Jexus作了简单的介绍,同时我们也对Jexus的整体配置作了详细的讲解,介绍了Jexus的进程守护工具"jws.guard",相信各位读者对于Jexus应该已经有 ...

  6. TeeChart控件的安装与常用 功能设置

    TeeChart控件的安装 TeeChart 7.0 With Source在Delphi 7.0中的安装 一.删除Delphi7自带TeeChart  1.Component -> insta ...

  7. Eclipse自动补全功能和自动生成作者、日期注释等功能设置

    修改作者.日期注释格式:打开Windows->Preferences->Java->Code Style->Code Templates,点击右边窗口中的Comments,可以 ...

  8. 响应式布局中重要的meta标签设置.适用于手机浏览器兼容性设置

    <!-- #手机浏览器兼容性设置 -->    <meta content="application/xhtml+xml;charset=UTF-8" http- ...

  9. Linux Eclipse代码提示功能设置(Java & C/C++)

    最近在Linux下开发,由于长期使用Visual Studio 2010,对代码提示功能情有独钟,现在在Linux下,使用Eclipse做开发,当然免不了怀念Visual Studio强悍的代码提示, ...

随机推荐

  1. 你的应用是如何被替换的,App劫持病毒剖析

    一.App劫持病毒介绍 App劫持是指执行流程被重定向,又可分为Activity劫持.安装劫持.流量劫持.函数执行劫持等.本文将对近期利用Acticity劫持和安装劫持的病毒进行分析. 二.Activ ...

  2. 夜深了,写了个JQuery的省市区三级级联效果

    刚刚练手的JQuery,希望大神们指正 主要实现以下功能: 1.三级菜单级联加载数据 2.可以在不操作脚本的情况下,给元素加属性实现级联功能 3.自定义动态显示数据 咨询问题: 对于一般比较固定不变的 ...

  3. 谷歌chrome浏览器www.tradeadexchange.com广告弹窗跳转劫持病毒

    近期大量网友出现chrome浏览器被劫持的情况,表现如下:           ·  点击(访问)任意网站任意链接均有概率弹出www.tradeadexchange.com.           ·  ...

  4. solve the problem of 'java web project cannot display verification code'

    my java code of the function: package com.util; import java.awt.Color; import java.awt.Font; import ...

  5. <canvas>drawImage()方法无法显示图片

    在书上看到用<canvas>绘制图像就动手试试,刚开始,我的代码是这样的: <!DOCTYPE html> <html> <head> <meta ...

  6. MySql.Data.MySqlClient.MySqlException: Parameter ‘@maxid’ must be defined

    本文涉及到的mysql知识点: mysql中的if条件语句用法: IF(expr1,expr2,expr3) mysql使用变量(mysql中变量不用事前申明) mysql事务 testcase 为了 ...

  7. Android-找到包下面所有的类

    Android 利用反射找到包下面所有的类 Android下其实有一个DexFile的东西,利用它我们可以很好的找到包下面所有的类 什么是DexFile? 官方的说明是这样的: Manipulates ...

  8. 冒烟测试 smoking test

    冒烟测试的概念: 版权声明:本文为博主原创文章,未经博主允许不得转载. 冒烟测试既是对软件基本的功能进行测试,测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本的功能正常,保证软件系 ...

  9. HTML5系列:HTML5本地存储

    1. Web Storage存储 HTML4在客户端存储数据通常使用Cookie存储机制将数据保存在用户的客户端,但使用Cookie方式存储客户端数据存在一系列的制约发展因素,如限制存储数据空间大小. ...

  10. Lightmaping

    一.基本知识点 1.Baked Only:不会传入shader,只有烘焙时才有用,也就是_LightColor0等这种变量不会表示一个Baked Only Light(前提是场景有lightmap,如 ...