浏览器定义文件包含各个浏览器的定义。在运行时,ASP.NET 使用请求标头中的信息来确定发出请求的浏览器的类型。随后,ASP.NET 使用 .browser 文件来确定浏览器的功能,以及如何向该浏览器呈现标记。对于希望创建可以在移动设备上查看的应用程序的 Web 开发人员,这很有用。因为这样可以利用控件适配器根据设备类型改编 ASP.NET Web 服务器控件的行为。有关更多信息,请参见请参见一节中的链接。
browsers 元素使用下面的结构。 <browsers> <browser id="browser name" parentID="parent browser name" refID="reference ID"> <identification> <userAgent match="regular expression" nonMatch="regular expression" /> <header match="regular expression" name="header name" nonMatch="regular expression" /> <capability match="regular expression" name="capability name" nonMatch="regular expression" /> </identification> <capture> <userAgent match="regular expression" /> <header match="regular expression" name="header name" /> <capability match="regular expression" name="capability name" /> </capture> <capabilities> <capability name="capability name" value="capability value" /> </capabilities> <controlAdapters markupTextWriterType="type name"> <adapter adapterType="name of adapter class" controlType="name of control class" /> </controlAdapters> <sampleHeaders> <header name="header name" value="header value" /> </sampleHeaders> </browser> <gateway id="gateway ID" parentID="parent browser ID"> <!-- Same child elements as for <browser>. <identification></identification> <capture></capture> <capabilities></capabilities> <controlAdapters></controlAdapters> <sampleHeaders></sampleHeaders> --> </gateway> <defaultBrowser id="Default" parentID="parent browser ID" refID="reference ID" > <!-- Same child elements as for <browser>. <identification></identification> <capture></capture> <capabilities></capabilities> <controlAdapters></controlAdapters> <sampleHeaders></sampleHeaders> --> </defaultBrowser> </browsers> ![]()
![]() 如果您发现没有任何现有的浏览器定义文件符合您的条件,则可以通过使用下面的示例一节中的代码创建新的浏览器定义文件。
预定义的浏览器定义文件存储在 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中。应用程序级别的浏览器定义文件可以放在应用程序的 App_Browsers 目录中。在这两个位置中,浏览器定义文件都必须具有 .browser 文件扩展名。不要更改 ASP.NET 随附的浏览器定义文件,因为 Service Pack 可能会更新这些文件,从而改写您所做的更改。相反,您应该创建新的 .browser 文件,并在新的 browser 定义中使用 parentID 属性来继承设置,或者使用 refID 属性向现有的浏览器定义添加功能。 在运行时,浏览器定义文件信息将合并到 BrowserCapabilitiesFactory 对象中的已知浏览器的集合内。发出请求时,ASP.NET 根据请求标头标识请求的浏览器,并编译一个与请求的浏览器类型相对应的 HttpBrowserCapabilities 对象。这一步是这样完成的:在开始时使用一个空字典,然后对浏览器定义树应用以下递归步骤:
HttpBrowserCapabilities 对象被写入缓存,可以被来自同一类型的浏览器发出的其他请求再次使用。 Web 应用程序可以使用 System.Web.HttpRequest.Browser 属性访问 HttpBrowserCapabilities 对象的当前实例。此对象是只读的,并包含每个功能的属性。或者,Web 开发人员可以构建一个从 HttpBrowserCapabilities 类继承的自定义类,并在 System.Web.HttpRequest.Browser 属性中存储一个实例。 对位于 App_Browsers 目录中的 .browser 文件所做的更改会使缓存无效,并且下一次请求将导致应用程序重新编译。但是,如果对 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中的 .browser 文件做出了更改,您必须使用 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_regbrowsers.exe 工具手动重新编译应用程序,或者使用 BrowserCapabilitiesCodeGenerator 类以编程方式重新编译应用程序。
浏览器对应用程序发出请求时,浏览器的功能存储在 Browser 属性中,浏览器的标识则存储在 UserAgent 属性中。ASP.NET Web 服务器控件查询功能列表,以决定如何针对不同的浏览器适当地改编控件的行为。 ![]() 若要查看强类型浏览器功能的列表,请参见 HttpCapabilitiesBase 类的属性。这些属性在浏览器定义文件中使用 Camel 大小写格式。例如,如果您希望在浏览器定义文件中指定 BackgroundSounds 功能,则键入 backgroundSounds。 您也可以定义自己的功能。 Web 应用程序可以通过下列两种方式之一检索 HttpBrowserCapabilities 对象中的功能值:
![]() .NET Framework 随附有预定义的浏览器定义文件,这些文件位于 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中。您可以在应用程序的 App_Browsers 目录中创建应用程序级别的浏览器定义文件。有关特殊的 ASP.NET 目录的信息,请参见 ASP.NET 网站布局。 下面的代码示例摘自 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中的 Generic.browser 文件。
<browsers> <browser id="GenericDownlevel" parentID="Default"> <identification> <userAgent match="^Generic Downlevel$" /> </identification> <capture> </capture> <capabilities> <capability name="cookies" value="false" /> <capability name="ecmascriptversion" value="1.0" /> <capability name="tables" value="true" /> <capability name="type" value="Downlevel" /> </capabilities> <controlAdapters> <adapter controlType="System.Web.UI.WebControls.Menu" adapterType="System.Web.UI.WebControls.Adapters.MenuAdapter" /> </controlAdapters> </browser> </browsers> 下面的代码示例摘自 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目录中的 WebTV.browser 文件。 <browsers> <browser id="WebTV" parentID="IE2"> <identification> <userAgent match="WebTV/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))" /> </identification> <capture> </capture> <capabilities> <capability name="backgroundsounds" value="true" /> <capability name="browser" value="WebTV" /> <capability name="cookies" value="true" /> <capability name="isMobileDevice" value="true" /> <capability name="letters" value="${letters}" /> <capability name="majorversion" value="${major}" /> <capability name="minorversion" value="${minor}" /> <capability name="tables" value="true" /> <capability name="type" value="WebTV${major}" /> <capability name="version" value="${version}" /> </capabilities> <controlAdapters markupTextWriterType="System.Web.UI.Html32TextWriter"> </controlAdapters> </browser> <browser id="WebTV2" parentID="WebTV"> <identification> <capability name="minorversion" match="2" /> </identification> <capture> </capture> <capabilities> <capability name="css1" value="true" /> <capability name="ecmascriptversion" value="1.0" /> <capability name="javascript" value="true" /> </capabilities> </browser> <gateway id="WebTVbeta" parentID="WebTV"> <identification> <capability name="letters" match="^b" /> </identification> <capture> </capture> <capabilities> <capability name="beta" value="true" /> </capabilities> </gateway> </browsers> ![]() 下面的代码示例是一个空的 .browser 文件,您可以用它为基础进行进一步的构建。注意不要在您的浏览器文件中创建循环引用。 <?xml version="1.0" encoding="utf-8"?> <browsers> <browser id="NewBrowser" parentID="Mozilla"> <identification> <userAgent match="Unique User Agent Regular Expression" /> </identification> <capture> <userAgent match="NewBrowser (?'version'\d+\.\d+)" /> </capture> <capabilities> <capability name="browser" value="My New Browser" /> <capability name="version" value="${version}" /> </capabilities> </browser> <browser refID="Mozilla"> <capabilities> <capability name="xml" value="true" /> </capabilities> </browser> </browsers> ![]()
![]() |
|
来自: thy > 《urlrewrite》