Есть ли простой способ указать все «обычные» представления, это приложение ASP.NET MVC должно содержать charset=utf-8
, добавленное к Content-Type
? View()
не имеет переопределения, которое позволяет указать Content-Type
и ActionResult
, и друзья, похоже, ничего не раскрывают. Очевидно, что мотивация заключается в том, чтобы обойти Internet Explorer, угадывая «правильный» тип кодирования, который я, в свою очередь, хочу сделать, чтобы избежать атак типа XSS UTF-7.Добавление «charset» ко всем HTTP-ответам ASP.NET MVC
ответ
Возможно, это в вашем web.config будет делать магию?
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
Вы могли бы написать атрибут для него:
public class CharsetAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8";
}
}
Вы можете сделать это немного умнее, но это общая идея. Добавьте его в класс базового контроллера, и все ваше приложение будет закрыто.
Это было бы здорово, если бы я работал в интегрированном режиме конвейера, но я не верю, что мне разрешено гадать с заголовками именно так на IIS6 и раньше, не так ли? –
Вы можете, конечно, добавить их; мы протестировали это, и оно работает. Однако я не пробовал модифицировать существующий заголовок. Дать ему шанс; это легко проверить. –
В 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 «s.
Конечно, вам необходимо обеспечить правильное кодирование ответа, то есть кодирование содержимого должно соответствовать таковому, указанному в атрибуте ResponseCharset.
Это очень помогло мне, когда я тестировал некоторый код mvc с помощью Chrome, потому что он не указывает кодировку в заголовке accept.
- 1. Добавление пространства имен ко всем представлениям в ASP.NET MVC 6
- 2. добавление интерфейса ко всем классам
- 3. Аутентификация ASP.NET: добавление аналогичной части (домена) ко всем именам пользователей
- 4. Прикреплять общие свойства ко всем представлениям в ASP.NET MVC
- 5. MVC Asp.net Добавить скрипт ко всем представлениям с сайта Ajax
- 6. Добавление jQuery ко всем страницам веб-приложения
- 7. Добавление заголовка ко всем файлам PHP
- 8. Добавление временных меток ко всем сообщениям консоли
- 9. Добавление существующего атрибута ко всем наборам атрибутов
- 10. Добавление метода ко всем классам, реализующим интерфейс
- 11. Добавление собственности ко всем моим UIControls
- 12. XSL: добавление нового элемента ко всем
- 13. Добавление предиката/фильтра ко всем запросам таблицы
- 14. Добавление смещения ко всем элементам в структуре
- 15. Добавление префикса ко всем классам css
- 16. Добавление http: // ко всем ссылкам без протокола
- 17. Добавление конфигурации маршрута ко всем маршрутам
- 18. Добавление одинакового текста ко всем файлам каталога
- 19. Добавление инвариантной проверки ко всем методам класса
- 20. GIT: добавление файла добавляется ко всем ветвям
- 21. Добавление переменной ко всем представлениям в grails
- 22. Добавление переменной ко всем вызовам ajax
- 23. Проходящая модель ко всем представлениям mvc
- 24. Ограничить доступ ко всем страницам asp.net
- 25. Доступ ко всем текущим состояниям сеанса ASP.NET
- 26. Автоматическое добавление Alt-текста ко всем изображениям без JS
- 27. Asp.Net MVC Добавление таблицы
- 28. Весна mvc charset
- 29. Доступ ко всем связанным значениям
- 30. Asp.Net MVC - Общие данные по всем контроллерам
+1; Мне нравится это лучше, чем мое предложение, хотя я считаю, что оба будут работать. –
Для справки, по умолчанию как requestEncoding, так и responseEncoding является utf-8 в любом случае. См. [MSDN] (http://msdn.microsoft.com/en-us/library/hy4kkhe0.aspx) – Appetere
Обновлена ссылка на [MSDN] (http://msdn.microsoft.com/en-gb/library/hy4kkhe0 (v = VS.100) .aspx) – Liam