使IIS不将页面呈现为WML。永远!

时间:2009-08-11 15:30:34

标签: asp.net iis iis-6

一些背景

我目前正在移动网站上工作,所以我一直在Firefox中使用User Agent switcher(可爱的插件)切换用户代理。但是当我进入管理站点时,它呈现为WML,这使得Firefox一直很困惑,所以它试图下载它而不是显示内容。这让我感到沮丧(不会沮丧,但足够!)。

我想要的是什么!

无论请求用户代理是什么,如何让我们的管理网站始终将内容发送为text/html而不是WML?

我完全控制了这个盒子。这是IIS 6.0。

7 个答案:

答案 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中设置它。