是否可以在ASP.NET中禁用browserCaps功能?

时间:2010-10-06 12:48:49

标签: asp.net iis-7 asp.net-4.0 browsercaps

是否可以禁用ASP.NET中的browserCaps功能?

我希望我的网站能够可靠,准确地为所有浏览器定义,无论其功能如何。

如果他们的浏览器无法支持该网站,那就是他们的问题。我的网站不应该是一些如何试图降低自身以容纳已解散的客户端。

当看起来蜘蛛运气不好时,我觉得爬行网站,获得较小版本的网站导致输出缓存服务于剥离文件,这是非常令人沮丧的。

2 个答案:

答案 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();

然而,这还没有真正经过测试,不确定这种变化究竟会产生什么影响。