asp.net mvc продолжает переопределять тип контента text/html с помощью .wml

StackOverflow https://stackoverflow.com/questions/1176947

  •  19-09-2019
  •  | 
  •  

Вопрос

Я разрабатываю веб-сайт, который можно просматривать на мобильных устройствах (сотовых телефонах).Я просто использую простой HTML 4.01, ничего особенного.Страницы прекрасно отображаются во всех протестированных нами мобильных браузерах, за исключением Nokia Series 40 1-5-й редакций.При ближайшем рассмотрении кажется, что IIS автоматически отображает HTML с типом контента text/vnd.wap.wml вместо text/html.Поскольку мы не используем WAP, страница завершается с ошибкой.

Я использую ASP.Net MVC 1.0, поэтому добавил ActionFilterAttribute чтобы переопределить тип контента.Этот код выполняется, но на стороне клиента он по-прежнему отображается как vnd.wap.wml.
Я использую этот тип документа;

<?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">

Стоит отметить, что vnd.wap.wml — первый Accept-Encoding указан мобильным браузером, поэтому я предполагаю, что IIS7 обслуживает его по этой причине.И я думаю, поскольку MVC конкретно не относится к файлам .html (или .aspx), возможно, тип mime пропускается?Я подозреваю, что это, вероятно, исправление IIS, а не исправление кода.

Буду признателен за любую оказанную помощь!

Это было полезно?

Решение

Оказывается, я неправильно реализовал ActionFilter..Мне нужно было переопределить метод OnResultExecuted в дополнение к методу OnActionExecuted.Полный атрибут выглядит следующим образом (просто добавьте [HtmlOverrideFilter] в свои контроллеры там, где это необходимо).Надеюсь, это кому-то поможет.

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";
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top