13

すべての「通常の」ビューを指定する簡単な方法はありますcharset=utf-8Content-Type? View()を指定できるオーバーライドがなくContent-TypeActionResult友人も何も公開していないようです。動機は明らかに、「正しい」エンコーディング タイプを推測する 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 に答える