HttpStatusCodeResult 消息编码

HttpStatusCodeResult message encoding

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

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

应该return:

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

但我得到:

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

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

你不应该得到“Za¿ó³æ gêsi¹ jañ”。任何地方。

但您无法获得“Zażółć gęsią jaźń”。在 HTTP 状态行原因短语中,因为它只支持 ASCII 字符集和编码 [RFC 7230 ]。 (HTTP header 字段确实有 % 编码等机制,但状态行没有。)

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

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

使用任何你想要的内容,包括HTML。但是,如果 not long enough 看起来有用且现代,接收此内容的 Web 浏览器可能会覆盖内容。您还应该考虑 Web 服务器是否配置为替换错误页面。这可能有帮助:

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