是否可以在ASP.NET中禁用browserCaps功能?
我希望我的网站能够像我定义的那样可靠和准确地提供给所有浏览器,而不管它们的功能如何。
如果他们的浏览器不能支持网站,那就是他们的问题。我的网站不应该是一些如何试图降级自己,以适应已停业的客户。
这是非常令人沮丧的,当它似乎有坏运气的蜘蛛爬行的网站,获得较低版本的网站导致输出缓存服务于剥离的文件。
发布于 2010-10-07 18:07:03
您可以在page指令或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中以正确的方式呈现菜单控件,但我并不确切地知道如何一次对所有输出执行此操作。
发布于 2014-10-01 17:56:39
我目前正在尝试的一个疯狂的解决方法是注入返回静态HttpBrowserCapabilities的我们自己的HttpCapabilitiesDefaultProvider。然后,诀窍是始终返回相同的功能对象,因此通过在使用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();然而,这还没有真正经过测试,不确定这种变化的确切影响是什么。
https://stackoverflow.com/questions/3872571
复制相似问题