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

Car*_*ist 10 asp.net iis iis-6

一些背景

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

我想要的是!

text/html无论请求用户代理如何,如何使我们的管理站点始终发送内容而不是WML?

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

Mar*_*ell 11

我们有这个,因为我们使用带有html的razor,页面无法自动适应.对我来说,最简单的解决方法是更改​​以下内容类型_ViewStart.cshtml:

Response.ContentType = "text/html";
Run Code Online (Sandbox Code Playgroud)

只有在没有明确设置的情况下才会"弄清楚自己的内容类型"疯狂.所以......设定它.

您的实际视图仍然可以覆盖此:

@{
    Layout = null;
    Response.ContentType = "application/atom+xml";
}
Run Code Online (Sandbox Code Playgroud)

有关信息,要在本地开发服务器上测试此问题(使用干净缓存以避免先前缓存数据的错误结果),请执行类似wget或Fiddler的操作:

wget yourpage --header="Accept: text/vnd.wap.wml" --server-response --header="Accept-Encoding: gzip, deflate"
Run Code Online (Sandbox Code Playgroud)

并寻找:

Content-Type: text/vnd.wap.wml; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

在结果中; 如果你看到,IIS/ASP.NET决定假装你的回复满足请求的"接受"标题......即使它没有.更糟糕的是:您现在可以从wget获取"text/vnd.wap.wml" 而无需指定Accept标头(或指定类似"text/html"); 如果你看到这个你有问题(或者:你的用户这样做) - 你有一个缓存的WAP响应,正在被送到非WAP客户端.

通过上面的调整,第一个wget 将返回 "text/html" - 因为这就是我们的内容.对不起,低级浏览器; 你应该包含"text/html"作为一个选项 - 如果你不能处理"text/html"......很糟糕就是你.


Rub*_*ben 8

如果您想要无代码/无aspx更改,可以将浏览器功能文件直接添加到应用程序根目录下的App_Browsers文件夹中(如果文件夹不在那里,只需创建它).要禁用WML,只需将包含以下XML的名为ForceHtml.browser的文件(以.browser结尾的任何内容)放入:

<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>
Run Code Online (Sandbox Code Playgroud)