13

有没有一种简单的方法来指定所有“正常”视图是一个 ASP.NET MVC 应用程序要charset=utf-8附加到Content-Type? View()缺少允许您指定的覆盖Content-Type,并且ActionResult和朋友似乎也没有公开任何内容。动机显然是要绕过 Internet Explorer 猜测“正确”的编码类型,而我又想这样做以避免 UTF-7 XSS 攻击。

4

3 回答 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 回答