三、改变浏览器能力
通过使用一种称为浏览器能力的特征,ASP.NET能够确定用户正在使用的浏览你的网站的浏览器的功能。浏览器能力通过使用HttpBrowserCapabilities对象(由Request.Browser属性提供)加以描述。例如,您可以使用HttpBrowserCapabilities对象来确定当前浏览器的类型和版本是否支持特定版本的JavaScript。或者,您可以使用HttpBrowserCapabilities对象来确定是否请求是从一台移动设备发出的。
HttpBrowserCapabilities对象通过一组浏览器定义文件驱动。这些文件包含了一些特定浏览器的功能信息。在ASP.NET 4中,这些浏览器定义文件都得到了更新以便包含最新出现的浏览器及设备(例如Google Chrome,Research in Motion的BlackBerry智能手机和苹果的iPhone)的信息。
下面的列表显示了新的浏览器定义文件:
blackberry.browser
chrome.browser
Default.browser
firefox.browser
gateway.browser
generic.browser
ie.browser
iemobile.browser
iphone.browser
opera.browser
safari.browser
四、使用浏览器能力提供程序
在ASP.NET版本3.5 Service Pack 1中,您可以使用下列方式来定义浏览器能力:
在机器级上,您可以在以下文件夹下创建或更新一个.browser XML文件:
\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers
后在您定义浏览器能力后,您可以从Visual Studio命令提示符运行以下命令来重建浏览器能力程序集并把它添加到GAC中:
aspnet_regbrowsers.exe -I c
对于个体应用程序,您可以在应用程序的App_Browsers文件夹下创建一个.browser文件。
这些办法需要您更改XML文件,而对于机器级别的更改,在您运行aspnet_regbrowsers.exe进程后,您必须重新启动应用程序。
ASP.NET 4中包括了一个称为浏览器能力提供程序的新特征。顾名思义,这可以让您构造一个提供程序,它能让您使用自己的代码来决定浏览器能力。
在实践中,开发人员往往不去定义定制的浏览器能力。浏览器文件很难更新,更新它们的进程也相当复杂,而且.browser文件相应的XML语法也可能在使用和定义时比较复杂。使这一过程容易得多的一种方案是提供一种共同的浏览器定义语法,或者包含最新浏览器定义的数据库,甚至是一个针对这样的一个数据库的Web服务。新的浏览器能力提供程序使得这些支持都有可能实现,适合第三方开发商开发。
使用新的ASP.NET 4浏览器能力提供程序的功能主要有两种方法:扩展ASP.NET浏览器能力定义功能;或完全取代它。下面首先描述如何取代浏览器能力,然后讨论如何扩展它。
(一)取代ASP.NET浏览器能力功能
要完全替换ASP.NET浏览器能力定义功能,请遵循下列步骤:
1. 创建一个派生自HttpCapabilitiesProvider类的提供程序,并重载GetBrowserCapabilities方法,如以下示例所示:
{
public override HttpBrowserCapabilities
GetBrowserCapabilities(HttpRequest request)
{
HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities();
Hashtable values = new Hashtable(180, StringComparer.OrdinalIgnoreCase);
values[String.Empty] = request.UserAgent;
values["browser"] = "MyCustomBrowser";
browserCaps.Capabilities = values;
return browserCaps;
}
}