2009-07-24 7 views
2

私はモバイル(携帯電話)デバイスで表示されるWebサイトを開発しています。私は単純なHTML 4.01を使用しています。何も特別なものはありません。 Nokia Series 40 1-5版以外は、テストしたすべてのモバイルブラウザでページが正常に表示されます。詳細を見ると、IISはtext/htmlの代わりにtext/vnd.wap.wmlというコンテンツタイプのhtmlを自動的にレンダリングしているようです。私たちはWAPを使用していないので、ページはエラーで失敗します。asp.net mvcは.wmlでtext/htmlコンテンツタイプをオーバーライドし続けます

私はASP.Net MVC 1.0を使用していますので、content-typeをオーバーライドするために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修正だと思われます。

ご協力いただきありがとうございます。

答えて

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"; 
    } 
} 
関連する問題