2009-08-11 6 views
10

Einige HintergrundLassen Sie IIS Seiten nicht als WML rendern. Je!

Ich bin derzeit auf einer mobilen Website arbeiten, damit ich die Zeit, um alle User-Agent in Firefox immer Schalt mit User Agent switcher (schöne Add-on). Aber wenn ich auf die Admin-Site gehe, rendert es als WML, was Firefox alles verwirrt, so dass es versucht, es herunterzuladen und dann den Inhalt zu zeigen. Und das macht mich frustriert (nicht frustriert runterzufallen, aber genug!).

Was ich will!

Wie kann ich unsere Admin-Site dazu bringen, IMMER Inhalt als text/html anstelle von WML zu senden, unabhängig von der Anfrage User-Agent?

Ich habe die volle Kontrolle über die Box. Es ist IIS 6.0.

Antwort

8

Wenn Sie eine No-Code/No-Aspx-Änderung wünschen, können Sie eine Datei mit Browserfunktionen in den Ordner App_Browsers direkt unter Ihrem Anwendungsstamm hinzufügen (wenn der Ordner nicht vorhanden ist, erstellen Sie ihn einfach). Um WML zu deaktivieren, legen Sie einfach eine Datei mit dem Namen ForceHtml.browser (alles in .Browser Endung) das folgende XML enthält:

<browsers> 
    <browser refID="Default"> 
    <capabilities> 
     <capability name="preferredRenderingMime" value="text/html" /> 
     <capability name="preferredRenderingType" value="html32" /> 
     <capability name="preferredImageMime" value="image/gif" /> 
     <capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" /> 
    </capabilities> 
    <controlAdapters markupTextWriterType="System.Web.UI.HtmlTextWriter" /> 
    </browser> 
</browsers> 
0

Das klingt, als ob es mehr mit Ihrem Admin-System zu tun hat, dass das IIS-Feld als Admin-Site das useragent als mobiles Gerät sieht und ändert, wie es Ihre Anfrage darstellt, von Standard-HTML zu .wml. Sie müssen dies in der App ändern, glaube ich.

+0

Hallo, danke für deine Antwort. Das war meine erste Idee auch. Aber da ich so etwas im Code nicht gefunden habe, habe ich eine neue WebbApplication erstellt und mit einem Nokia n95 user-agent ausprobiert und den Inhalt als wml bekommen. Und wenn ich versuche, SO mit diesem User-Agent zu durchsuchen, bekomme ich auch die Antwort als text/vnd.wap.wml. Das lässt mich denken, dass asp.net verschiedene Content-Typen für verschiedene User-Agenten verwendet. –

0

Configure the MIME type für die Erweiterung wml zu Text/HTML. Sie können auch eine benutzerdefinierte HTTPHandler erstellen und die Skriptzuordnung für die Erweiterung auf ASP.NET verweisen. Dann könnten Sie nach den Bedingungen suchen und das Rendering auf beliebige Weise erzwingen.

+0

Ich habe versucht, den Mime-Typ auf dem Webserver zu ändern, alles, was ich nicht zu helfen schien. So werde ich versuchen, eine benutzerdefinierte HttpHandler –

0

Sie können das Verhalten des Servers mit der ClientTarget-Eigenschaft der Seite überschreiben.

In Code:

Page.ClientTarget = "uplevel"; 

In der @ Page-Deklaration:

<%@Page [...] clientTarget="uplevel" %> 

Leider, ich glaube nicht, dass Sie dies in den pages element eine web.config festlegen.

+0

erstellen Dies behebt das Problem nicht. – kipusoep

1

Als Workaround (wenn Sie es nicht schaffen, die App zu konfigurieren), könnten Sie wmlbrowser Add-on für Firefox https://addons.mozilla.org/en-US/firefox/addon/62 installieren.

+0

Beantwortet meine Frage nicht wirklich, aber hilft mir, mein Problem zu lösen :) cheerio! –

11

We had this, und da wir Rasierer mit HTML verwenden, können die Seiten nicht automatisch anpassen.

Response.ContentType = "text/html"; 

Die „herauszufinden, den Content-Type selbst“ Wahnsinn geschieht nur, wenn nichts explizit gesetzt: Für mich ist die einfachste fix den Content-Type im _ViewStart.cshtml zu ändern war. Also ... setze es.

Ihre tatsächlichen Ansichten können dies immer noch außer Kraft setzen:

@{ 
    Layout = null; 
    Response.ContentType = "application/atom+xml"; 
} 

Für Informationen, für diese Ausgabe auf dem lokalen Dev-Server (mit einem sauberen Cache falsche Ergebnisse von früheren Cache gespeicherten Daten zu vermeiden) zu testen, so etwas wie wget oder Fiddler:

wget yourpage --header="Accept: text/vnd.wap.wml" --server-response --header="Accept-Encoding: gzip, deflate" 

und sucht:

Content-Type: text/vnd.wap.wml; charset=utf-8 

im resu lt; Wenn Sie das sehen, hat sich IIS/ASP.NET entschieden, so zu tun, als würde Ihre Antwort den Header "Accept" der Anfrage erfüllen ... auch wenn dies nicht der Fall ist. Schlimmer noch: Sie könnten jetzt die Datei "text/vnd.wap.wml" von einem wget ohne bekommen, indem Sie den Accept-Header angeben (oder etwas wie "text/html" angeben); Wenn Sie sehen, haben Sie ein Problem (oder: Ihre Benutzer tun) - Sie haben eine Cache-Antwort für WAP, die nicht-WAP-Clients gefüttert wird.

Mit dem oben zwicken, die ersten wget wird „text/html“ zurückkehren - denn das ist es, was unsere Inhalte. Entschuldigung, down-level Browser; Sie sollten "text/html" als Option hinzugefügt haben - und wenn Sie nicht mit "text/html" umgehen können ... ist das ein Problem für Sie.

2

mit iis7. dieses ist global.asax Putting hat den Trick:

void Application_OnUpdateRequestCache() { 
    if (Response.ContentType == "text/vnd.wap.wml") { 
    Response.ContentType = "text/html"; 
    } 
} 

hth

Verwandte Themen