Добавление charset ко всем HTTP-ответам ASP.NET MVC - PullRequest
12 голосов
/ 16 ноября 2009

Есть ли простой способ указать все "нормальные" представления, если приложение ASP.NET MVC должно добавить charset=utf-8 к Content-Type? У View() отсутствует переопределение, позволяющее указать Content-Type, а ActionResult и друзья, похоже, тоже ничего не выставляют. Мотивация, очевидно, заключается в том, чтобы обойти Internet Explorer и угадать «правильный» тип кодировки, что я, в свою очередь, хочу сделать, чтобы избежать атак UTF-7 XSS.

Ответы [ 3 ]

22 голосов
/ 16 ноября 2009

Может быть, это в вашем web.config сделает магию?

<configuration>
  <system.web>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
  </system.web>
</configuration>
2 голосов
/ 16 ноября 2009

Вы можете написать для него атрибут:

public class CharsetAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8";
    }
}

Не стесняйтесь делать это немного умнее, но это общая идея. Добавьте его в свой базовый класс контроллеров, и все ваше приложение покрыто.

0 голосов
/ 21 сентября 2014

В MVC 5 это может помочь:

public class ResponseCharset : ActionFilterAttribute
{
    private string Charset;

    public ResponseCharset(string charset = "utf-8") {
        Charset = charset;
    }

    public override void OnActionExecuted(HttpActionExecutedContext filterContext)
    {
        filterContext.Response.Content.Headers.ContentType.CharSet = Charset;
    }
} 

Использование:

public class OrderDetailsController : ApiController
{
    [ResponseCharset("utf-8")]  // can be windows-1251 etc.
    public Object Get(string orderId)
    {
       // ....
    }
}

Основано на идее @ craig-stuntz.

Конечно, вам нужно убедиться, что вы даете правильную кодировку ответа, т. Е. Кодировка контента должна соответствовать той, которая указана в атрибуте ResponseCharset.

Мне очень помогло, когда я тестировал код mvc с Chrome, потому что он не указывает кодировку в заголовке accept.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...