2009-07-24 4 views
2

Ich entwickle eine Website, die auf mobilen (Handy) Geräten betrachtet werden soll. Ich benutze einfach HTML 4.01, nichts besonderes. Die Seiten werden in allen von uns getesteten mobilen Browsern wiedergegeben, mit Ausnahme der Nokia Series 40 1-5. Bei genauerer Betrachtung scheint IIS den HTML-Code mit dem Inhaltstyp text/vnd.wap.wml anstelle von text/html automatisch zu rendern. Da wir WAP nicht verwenden, schlägt die Seite mit einem Fehler fehl.asp.net mvc behält sich das Überschreiben von text/html content-type mit. Wml

Ich benutze ASP.Net MVC 1.0, also habe ich eine ActionFilterAttribute hinzugefügt, um den Inhaltstyp zu überschreiben. Dieser Code wird ausgeführt, wird aber auf der Clientseite immer noch als vnd.wap.wml ausgegeben.
Ich verwende diesen 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">

Es ist erwähnenswert, dass die vnd.wap.wml die durch den mobilen Browser angegebene erste Accept-Encoding ist, so nehme ich an IIS7 es aus diesem Grund nach oben dient. Und da MVC nicht speziell auf .html (oder .aspx) Dateien verweist, wird der Mime-Typ vielleicht übersprungen? Ich vermute, dass dies wahrscheinlich ein IIS-Update ist und nicht ein Code-Fix.

Jede Hilfe wird sehr geschätzt!

Antwort

5

Es stellte sich heraus, dass ich den ActionFilter nicht korrekt implementiert hatte. Ich musste die OnResultExecuted-Methode zusätzlich zur OnActionExecuted-Methode überschreiben. Das vollständige Attribut sieht folgendermaßen aus (fügen Sie einfach [HtmlOverrideFilter] Ihren Controllern hinzu, falls erforderlich). Hoffe, das hilft jemandem.

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"; 
    } 
} 
Verwandte Themen