asp.net mvc使用.wml保持覆盖text/html内容类型

kei*_*041 2 asp.net-mvc iis-7 wml

我正在开发一个可在移动(手机)设备上查看的网站.我只是使用纯HTML 4.01,没什么特别的.除诺基亚Series 40第1-5版外,我们测试过的所有移动浏览器都能正常显示这些页面.仔细观察,似乎IIS会自动呈现带有内容类型的html text/vnd.wap.wml而不是text/html.由于我们没有使用WAP,因此页面失败并显示错误.

我正在使用ASP.Net MVC 1.0,所以我添加了一个ActionFilterAttribute覆盖内容类型.此代码运行但仍然在客户端以vnd.wap.wml的形式出现.
我正在使用这个doctype;

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

值得注意的是vnd.wap.wml是Accept-Encoding移动浏览器指定的第一个,因此我假设IIS7正在为此提供服务.我想因为MVC并没有专门引用.html(或.aspx)文件,可能会跳过mime类型?我怀疑这可能是一个IIS修复而不是代码修复.

任何帮助深表感谢!

kei*_*041 5

事实证明我没有正确实现ActionFilter ..除了OnActionExecuted方法之外,我还需要覆盖OnResultExecuted方法.完整属性如下所示(只需在需要时将[HtmlOverrideFilter]添加到控制器中).希望这有助于某人.

internal class HtmlOverrideFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.ContentType = "text/html";
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.ContentType = "text/html";
    }
}
Run Code Online (Sandbox Code Playgroud)