HTTP状态码消息编码

3

我需要返回一个带有描述的HttpStatusCode对象,其中包含特殊字符(变音符号)。我不知道如何设置正确的编码。

return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Zażółć gęsią jaźń.");

应该返回:

Zażółć gęsią jaźń。

但我得到的是:

Za¿ó³æ gêsi¹ jañ。

我尝试了 Response.Charset = System.Text.Encoding.UTF8.WebName; 等方法,但仍然没有解决。

1个回答

5

您不应该在任何地方看到"Za¿ó³æ gêsi¹ jañ."。

但是,由于HTTP状态行原因短语仅支持ASCII字符集和编码[RFC 7230],因此无法获取"Zażółć gęsią jaźń."。 (HTTP标头字段确实具有%-编码等机制,但状态行没有。)

因此,您可以省略原因短语并将消息放在正文中:

Response.StatusCode = (Int32)HttpStatusCode.BadRequest;
return Content("Zażółć gęsią jaźń. And, the quick brown fox jumps over the lazy dog. ");

使用任何内容,包括HTML。但是,如果不够长以至于不够有用和现代化,那么接收此内容的Web浏览器可能会覆盖它。您还应考虑Web服务器是否配置了替换错误页面。这可能会有所帮助:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

感谢您的支持。在将HttpStatusCodeResult对象替换为Content()后,编码正常,并且重音字符以正确方式显示。 - 1_bug
我有一个类似的情况,很奇怪的是,在本地IIS上我收到带有特殊字符的消息,但在Azure环境中它们被ASCII编码。也许最新的.NET版本终于允许配置这个了? - Pavel Jounda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接