Есть ли простой способ указать все "обычные" представления - приложение ASP.NET MVC должно иметь charset=utf-8
, добавленное к Content-Type
? View()
не имеет переопределения, которое позволяет вам указать Content-Type
и ActionResult
, и друзья, похоже, ничего не раскрывают. Очевидно, что мотивация заключается в том, чтобы обойти Internet Explorer, угадывая "правильный" тип кодирования, который я, в свою очередь, хочу сделать, чтобы избежать атак типа XSS UTF-7.
Добавление "charset" ко всем HTTP-ответам ASP.NET MVC
Ответ 1
Возможно, это в вашем web.config будет делать волшебство?
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
Ответ 2
Вы можете написать для него атрибут:
public class CharsetAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8";
}
}
Не стесняйтесь сделать это немного умнее, но это общая идея. Добавьте его в базовый класс контроллера, и все ваше приложение будет закрыто.
Ответ 3
В 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.