有没有一种简单的方法来指定所有“正常”视图是一个 ASP.NET MVC 应用程序要charset=utf-8
附加到Content-Type
? View()
缺少允许您指定的覆盖Content-Type
,并且ActionResult
和朋友似乎也没有公开任何内容。动机显然是要绕过 Internet Explorer 猜测“正确”的编码类型,而我又想这样做以避免 UTF-7 XSS 攻击。
问问题
13623 次
3 回答
22
也许你的 web.config 中的这个会变魔术?
<configuration>
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
于 2009-11-16T18:35:14.230 回答
2
你可以为它写一个属性:
public class CharsetAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers["Content-Type"] += ";charset=utf-8";
}
}
随意让它更聪明一点,但这是一般的想法。将它添加到您的基本控制器类中,您的整个应用程序将被覆盖。
于 2009-11-16T18:33:55.980 回答
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 代码时,它帮助了我很多,因为它没有在接受标头中指定编码。
于 2014-09-20T21:47:29.287 回答