すべての「通常の」ビューを指定する簡単な方法はあります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 に答える