asp.net mvc mantiene el texto/html content-type primordial con.wml
asp.net-mvc iis-7 (1)
Estoy desarrollando un sitio web que se va a ver en dispositivos móviles (teléfonos celulares). Solo estoy usando HTML 4.01, nada especial. Las páginas se procesan correctamente en todos los navegadores móviles que hemos probado, excepto en las ediciones de la Serie 40 de Nokia. En una inspección más cercana, parece que IIS está text/vnd.wap.wml
automáticamente el html con el tipo de contenido text/vnd.wap.wml
lugar de text/html
. Como no estamos usando WAP, la página falla con un error.
Estoy usando ASP.Net MVC 1.0, así que agregué ActionFilterAttribute
para anular el tipo de contenido. Este código se ejecuta pero sigue apareciendo como vnd.wap.wml en el lado del cliente.
Estoy usando este 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">
Vale la pena señalar que vnd.wap.wml es la primera Accept-Encoding
especificada por el navegador móvil, por lo que supongo que IIS7 la está publicando por ese motivo. Y supongo que como MVC no se refiere específicamente a los archivos .html (o .aspx), ¿quizás se está omitiendo el tipo mime? Sospecho que probablemente sea una solución de IIS en lugar de una corrección de código.
¡Cualquier ayuda es muy apreciada!
Resulta que no había implementado el ActionFilter correctamente. Necesitaba reemplazar el método OnResultExecuted además del método OnActionExecuted. El atributo completo se ve así (solo agregue [HtmlOverrideFilter] a sus Controladores cuando sea necesario). Espero que esto ayude a alguien.
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";
}
}