ASP.NET MVC continua substituindo o texto/html de conteúdo com .wml
-
19-09-2019 - |
Pergunta
Estou desenvolvendo um site que deve ser visualizado em dispositivos móveis (celulares). Estou apenas usando o HTML 4.01 simples, nada de especial. As páginas ficam bem em todos os navegadores móveis que testamos, exceto as edições da série 40 1-5. Em uma inspeção mais detalhada, parece que o IIS está renderizando automaticamente o HTML com o tipo de conteúdo de text/vnd.wap.wml
ao invés de text/html
. Como não estamos usando o WAP, a página falha com um erro.
Estou usando asp.net MVC 1.0, então adicionei um ActionFilterAttribute
para substituir o tipo de conteúdo. Esse código é executado, mas ainda sai como vnd.wap.wml no lado do cliente.
Estou 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 a pena notar que o vnd.wap.wml é o primeiro Accept-Encoding
Especificado pelo navegador móvel, por isso presumo que o IIS7 esteja servindo por esse motivo. E acho que, como o MVC não se refere especificamente a arquivos .html (ou .aspx), talvez o tipo MIME esteja sendo ignorado? Suspeito que isso seja provavelmente uma correção do IIS, em vez de um código de código.
Qualquer ajuda é muito apreciada!
Solução
Acontece que eu não havia implementado o Filter Action. O atributo completo se parece com esse (basta adicionar [htmloverridefilter] aos seus controladores, quando necessário). Espero que isso ajude alguém.
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";
}
}