2009-08-11 12 views
10

Algunos antecedentesHaga que IIS no represente páginas como WML. ¡Nunca!

Actualmente estoy trabajando en un sitio móvil así que cambiar constantemente de agente de usuario todo el tiempo en Firefox con User Agent switcher (precioso complemento). Pero cuando voy al sitio de administración que presta como WML, lo que hace que Firefox todo confuso, por lo que intenta descargarlo en lugar de mostrar el contenido. Y esto me frustra (¡no caer frustrado, pero suficiente!).

Lo que quiero!

¿Cómo puedo hacer que nuestro sitio de administración envíe SIEMPRE el contenido como text/html en lugar de WML, independientemente de la solicitud de usuario-agente?

que tienen el control total de la caja. Es IIS 6.0.

Respuesta

8

Si desea un cambio sin código/sin aspx, puede agregar un archivo de capacidades del navegador en la carpeta App_Browsers directamente debajo de la raíz de la aplicación (si la carpeta no está allí, solo créela). Para desactivar WML, simplemente coloque un archivo llamado ForceHtml.browser (cualquier cosa que termine en .browser) que contiene el siguiente código XML:

<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

Parece que tiene más que ver con su sistema de administración que la caja de IIS como el sitio de administración está viendo el agente como un dispositivo móvil y cambiando la forma en que presenta su solicitud, desde HTML estándar hasta .wml. Necesitarás cambiar esto en la aplicación, creo.

+0

Hola, gracias por su respuesta. Esa fue mi primera idea también. Pero como no encontré tal cosa en el código, creé una nueva aplicación Webb y la probé con un agente de usuario Nokia n95 y obtuve el contenido como wml. Y si trato de buscar SO con ese agente de usuario también obtengo la respuesta como text/vnd.wap.wml. lo que me hace pensar que asp.net usa diferentes tipos de contenido para diferentes usuarios-agentes. –

0

Configure the MIME type para la extensión WML a text/html. También puede crear un Custom HTTPHandler y señalar el mapa de script para la extensión a ASP.NET. Luego, podría verificar las condiciones y forzar la representación de la forma que desee.

+0

Intenté cambiar el tipo de Mime en el servidor web, todo lo que parecía no ayudaba. Así que intentaré crear un HttpHandler personalizado –

0

Puede anular el comportamiento del servidor con la propiedad ClientTarget de la página.

En código:

Page.ClientTarget = "uplevel"; 

En la declaración @ Page:

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

Por desgracia, no creo que usted puede configurar esto en el pages element de un web.config.

+0

Esto no soluciona el problema. – kipusoep

1

Como solución (si no logras configurar la aplicación), puedes instalar wmlbrowser add-on para firefox https://addons.mozilla.org/en-US/firefox/addon/62.

+0

Realmente no responde mi pregunta, pero me ayuda a resolver mi problema :) cheerio! –

11

We had this, y ya que estamos utilizando la maquinilla de afeitar con HTML, las páginas no se pueden adaptar de forma automática. Para mí, la solución más sencilla era cambiar el tipo de contenido en el _ViewStart.cshtml:

Response.ContentType = "text/html"; 

El "averiguar el tipo de contenido usted mismo" demencia sólo ocurre cuando nada se establece explícitamente. Entonces ... configúralo.

Sus puntos de vista actuales todavía pueden anular esta:

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

Para información, para poner a prueba para este problema en el servidor dev local (con una memoria caché limpia para evitar falsos resultados por los datos almacenados en caché anteriores), hacer algo como wget o Fiddler:

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

y busque:

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

en el resu lt; Si ve eso, IIS/ASP.NET ha decidido simular que su respuesta satisface el encabezado "Aceptar" de la solicitud ... incluso si no lo hace. Peor: es posible que ahora pueda obtener ese "texto/vnd.wap.wml" de un wget sin especificando el encabezado Aceptar (o especificando algo como "texto/html"); si ve esto tiene un problema (o: lo hacen sus usuarios): tiene una respuesta en caché para WAP que se está suministrando a clientes que no son WAP.

Con el truco anterior, el primer wget volverá "text/html" - ya que eso es lo que nuestro contenido es. Lo sentimos, navegadores de nivel inferior; deberías haber incluido "text/html" como una opción - y si no puedes manejar "text/html" ... es una mierda para ti.

2

usando iis7. poner este es global.asax hizo el truco:

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

hth

Cuestiones relacionadas