将“charset”添加到所有ASP.NET MVC HTTP响应中

时间:2009-11-16 18:27:35

标签: asp.net-mvc character-encoding utf-7

是否有一种简单的方法来指定所有“普通”视图是ASP.NET MVC应用程序要charset=utf-8附加到Content-TypeView()缺少允许您指定Content-TypeActionResult的覆盖,而朋友似乎也没有公开任何内容。很明显,动机可以解决Internet Explorer猜测“正确”编码类型的问题,而我希望这样做可以避免UTF-7 XSS攻击。

3 个答案:

答案 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代码时,它帮助了我很多,因为它没有在接受标头中指定编码。