一些背景
我目前正在移动网站上工作,所以我一直在Firefox中使用User Agent switcher(可爱的插件)切换用户代理。但是当我进入管理站点时,它呈现为WML,这使得Firefox一直很困惑,所以它试图下载它而不是显示内容。这让我感到沮丧(不会沮丧,但足够!)。
我想要的是什么!
无论请求用户代理是什么,如何让我们的管理网站始终将内容发送为text/html
而不是WML?
我完全控制了这个盒子。这是IIS 6.0。
答案 0 :(得分:11)
We had this,由于我们使用带有html的razor,因此页面无法自动调整。对我来说,最简单的解决方法是更改_ViewStart.cshtml
中的内容类型:
Response.ContentType = "text/html";
“自己弄清楚内容类型”疯狂只会在没有明确设置的情况下发生。所以...设定它。
您的实际观看次数仍可覆盖此内容:
@{
Layout = null;
Response.ContentType = "application/atom+xml";
}
有关信息,要在本地开发服务器上测试此问题(使用干净缓存以避免以前的缓存数据导致错误结果),请执行wget或Fiddler之类的操作:
wget yourpage --header="Accept: text/vnd.wap.wml" --server-response --header="Accept-Encoding: gzip, deflate"
并寻找:
Content-Type: text/vnd.wap.wml; charset=utf-8
在结果中;如果你看到,IIS / ASP.NET决定假装你的回复满足请求的“接受”标题......即使它没有。更糟糕的是:您现在可以从wget 获取“text / vnd.wap.wml”而不用指定Accept标头(或指定类似“text / html”);如果你看到 你有问题 (或者:你的用户这样做) - 你有一个缓存的WAP响应,正在被送到非WAP客户端。
通过上述调整,第一个wget 将返回 “text / html” - 因为这就是我们的内容。对不起,低级浏览器;你应该包含“text / html”作为一个选项 - 如果你不能处理“text / html”......很糟糕就是你。
答案 1 :(得分:8)
如果您想要无代码/无aspx更改,可以将浏览器功能文件直接添加到应用程序根目录下的App_Browsers文件夹中(如果文件夹不在那里,只需创建它)。要禁用WML,只需放入一个名为ForceHtml.browser的文件(以.browser结尾的任何内容),其中包含以下XML:
<browsers>
<browser refID="Default">
<capabilities>
<capability name="preferredRenderingMime" value="text/html" />
<capability name="preferredRenderingType" value="html32" />
<capability name="preferredImageMime" value="image/gif" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
</capabilities>
<controlAdapters markupTextWriterType="System.Web.UI.HtmlTextWriter" />
</browser>
</browsers>
答案 2 :(得分:2)
使用iis7。把它放在global.asax就可以了:
void Application_OnUpdateRequestCache() {
if (Response.ContentType == "text/vnd.wap.wml") {
Response.ContentType = "text/html";
}
}
HTH
答案 3 :(得分:1)
作为一种解决方法(如果您无法配置应用程序),您可以为firefox https://addons.mozilla.org/en-US/firefox/addon/62安装wmlbrowser加载项。
答案 4 :(得分:0)
这听起来更像是你的管理系统,作为管理站点的IIS框将useragent视为移动设备并改变它呈现请求的方式,从标准HTML到.wml。你需要在我相信的应用程序中更改它。
答案 5 :(得分:0)
Configure the MIME type用于text / html的wml扩展名。您还可以创建自定义HTTPHandler并将扩展的脚本映射指向ASP.NET。然后,您可以检查您的条件并以任何方式强制渲染。
答案 6 :(得分:0)
您可以使用页面的ClientTarget属性覆盖服务器的行为。
在代码中:
Page.ClientTarget = "uplevel";
在@ Page声明中:
<%@Page [...] clientTarget="uplevel" %>
可悲的是,我认为你不能在web.config的pages element中设置它。