是否有一种简单的方法来指定所有“普通”视图是ASP.NET MVC应用程序要charset=utf-8
附加到Content-Type
? View()
缺少允许您指定Content-Type
和ActionResult
的覆盖,而朋友似乎也没有公开任何内容。很明显,动机可以解决Internet Explorer猜测“正确”编码类型的问题,而我希望这样做可以避免UTF-7 XSS攻击。
答案 0 :(得分:22)
也许这在你的web.config中会起到魔力吗?
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
答案 1 :(得分:2)
你可以为它写一个属性:
public class CharsetAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8";
}
}
随意让它变得更聪明,但这是一般的想法。将它添加到您的基本控制器类,您的整个应用程序都将被覆盖。
答案 2 :(得分:0)
在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属性中指定的编码匹配。
当我使用Chrome测试某些mvc代码时,它帮助了我很多,因为它没有在接受标头中指定编码。