是否可以禁用ASP.NET中的browserCaps功能?
我希望我的网站能够可靠,准确地为所有浏览器定义,无论其功能如何。
如果他们的浏览器无法支持该网站,那就是他们的问题。我的网站不应该是一些如何试图降低自身以容纳已解散的客户端。
当看起来蜘蛛运气不好时,我觉得爬行网站,获得较小版本的网站导致输出缓存服务于剥离文件,这是非常令人沮丧的。
答案 0 :(得分:2)
您可以在页面指令或Page.Init中放置ClientTarget =“uplevel”
<%@ Page ClientTarget="uplevel" ...... %>
或
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Init
Page.ClientTarget = "uplevel"
End Sub
另一个选项是在您的站点中添加.browser文件,位于App_Browsers文件夹(默认的Asp.NET文件夹)中。它应该使用正则表达式以所有浏览器为目标,并通过添加功能以某种方式禁用正常的浏览器检测。我只是使用它来在Safari中以正确的方式呈现Menu控件,但我不知道如何一次性为所有输出执行此操作。
答案 1 :(得分:2)
我目前正在尝试的疯狂解决方法是注入我们自己的HttpCapabilitiesDefaultProvider
,它返回静态HttpBrowserCapabilities
。然后诀窍是始终返回相同的功能对象,因此通过在使用IE9时调用base.GetBrowserCapabilities
,我们使用Newtonsoft创建序列化,并通过在源中保存此字符串,我们可以构建类似IE9的功能对象,无论浏览器发起了什么请求。
public class CustomerHttpCapabilitiesProvider : HttpCapabilitiesDefaultProvider
{
private const string m_IE9Definition = "{\r\n \"$type\": \"System.Web.Mobile.MobileCapabilities, System.Web.Mobile\",\r\n \"UseOptimizedCacheKey\":..... ";
private readonly static Lazy<MobileCapabilities> m_Capabilities = new Lazy<MobileCapabilities>(() => JsonConvert.DeserializeObject<MobileCapabilities>(m_IE9Definition), true);
public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request)
{
return m_Capabilities.Value;
}
}
然后在Application_Start
中分配提供商:
HttpCapabilitiesBase.BrowserCapabilitiesProvider = new CustomerHttpCapabilitiesProvider();
然而,这还没有真正经过测试,不确定这种变化究竟会产生什么影响。