我正在开发一个可在移动(手机)设备上观看的网站.我只是使用纯HTML 4.01,没什么特别的.除诺基亚Series 40第1-5版外,我们测试过的所有移动浏览器都能正常显示这些页面.仔细观察,似乎IIS会自动使用text / vnd.wap.wml的内容类型而不是text / html呈现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\"\u0026gt; 值得注意的是,vnd.wap.wml是移动浏览器指定的第一个Accept-Encoding,因此我假设IIS7正在为此提供服务.我想因为MVC并没有特别提到.html(或.aspx)文件,可能会跳过mime类型?我怀疑这可能是一个IIS修复而不是代码修复. 任何帮助深表感谢!
解决方法
事实证明我没有正确实现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"; } }