在这个例子中,通过调用一个自定义的BuildCacheKey方法生成了一个缓存键,它通过调用一个自定义GetCacheTime方法来取得缓存需要的时间长度。然后,该代码把解析后的HttpBrowserCapabilities对象添加到缓存中。然后,可以从缓存中检索该对象,并重用于需要你的自定义提供程序的后续的请求中。
2. 如前面所描述的那样,在应用程序中注册这个提供程序。
(三)扩展ASP.NET浏览器能力功能
上一节介绍如何在ASP.NET 4中创建一个新的HttpBrowserCapabilities对象。您还可以通过添加新的浏览器能力定义来扩展那些已经在ASP.NET中存在的ASP.NET浏览器能力的功能。你不需要使用XML浏览器定义来实现这种功能。下面的过程说明了实现方法。
1. 创建一个派生自HttpCapabilitiesEvaluator的类,并重载其中的GetBrowserCapabilities方法,如下面的例子所示:
此代码首先使用ASP.NET浏览器能力功能来尝试识别出浏览器。但是,如果在请求中定义的信息没有标识出浏览器(即,如果HttpBrowserCapabilities对象的Browser属性是字符串“Unknown”),那么,代码将调用自定义的提供程序(MyBrowserCapabilitiesEvaluator)来识别浏览器。
2. 如前面的例子中说明的那样,在应用程序中注册这个提供程序。
{
public override HttpBrowserCapabilities
GetBrowserCapabilities(HttpRequest request)
{
HttpBrowserCapabilities browserCaps =
base.GetHttpBrowserCapabilities(request);
if (browserCaps.Browser == "Unknown")
{
browserCaps = MyBrowserCapabilitiesEvaulator(request);
}
return browserCaps;
}
}
(四)扩展浏览器能力功能—在现有能力定义中添加新能力
除了创建一个自定义浏览器定义提供程序以便动态地创建新的浏览器定义外,你可以使用附加的能力来扩展现有的浏览器定义。这可让您使用很接近于你想要的但仅缺乏少数能力的定义。为了做到这一点,请使用下面的步骤。
1. 创建一个由HttpCapabilitiesEvaluator类派生的类,并重载它的GetBrowserCapabilities方法,如下面的例子所示:
{
public override HttpBrowserCapabilities
GetBrowserCapabilities(HttpRequest request)
{
HttpBrowserCapabilities browserCaps =
base.GetHttpBrowserCapabilities(request);
if (browserCaps.Browser == "Unknown")
{
browserCaps = MyBrowserCapabilitiesEvaulator(request);
}
return browserCaps;
}
}
该示例代码扩展了现有的ASP.NET HttpCapabilitiesEvaluator类,并使用以下代码来获取匹配当前请求定义的HttpBrowserCapabilities对象:
base.GetHttpBrowserCapabilities(request);
然后,该代码可以添加或修改此浏览器的某种能力。有两种方法可以用来指定一个新的浏览器能力:
把一个键/值对添加到HttpCapabilitiesBase对象的Capabilities属性暴露的IDictionary对象。在前面的例子中,代码添加了一个称为“MultiTouch”的能力,并设置其值为true。
设置HttpCapabilitiesBase对象的现有属性。在前面的例子中,代码把Frames属性设置为true。这个属性仅仅是一个充当Capabilities属性暴露的IDictionary对象的访问器。
注:此模式适用于HttpBrowserCapabilities的任何属性,包括控件适配器。
2. 如前面的例子中说明的那样,在应用程序中注册这个提供程序。