asp.net MVCは.wmlでオーバーライドtext / htmlのコンテンツ・タイプを保持します
-
19-09-2019 - |
質問
私は、モバイル(携帯電話)デバイス上で閲覧するウェブサイトを開発しています。私は単なるHTML 4.01、全く何も特別なを使用しています。ページには、我々は、ノキアシリーズ40 1-5th版を除いて、テストしたすべてのモバイルブラウザで罰金レンダリングします。精密検査で、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">
これはvnd.wap.wmlは、携帯電話のブラウザで指定された最初のAccept-Encoding
であることは注目に値しますので、私はIIS7は、その理由のためにそれを提供していると仮定します。そして、MVCは、具体的.htmlファイル(または.aspxの)を参照してくださいしないように私は推測、おそらくMIMEタイプがスキップされていますか?私は、これはおそらく、IISの修正ではなく、コードの修正である疑います。
すべてのヘルプははるかに高く評価される!
解決
私はOnActionExecuted方法に加えて、OnResultExecutedメソッドをオーバーライドするために必要な..私は正しくのActionFilterを実施していなかったが判明します。完全な属性は、(必要な場合にだけ、あなたのコントローラに[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";
}
}