【问题标题】:ASP.NET MVC returning more than expectedASP.NET MVC 返回超出预期
【发布时间】:2015-10-09 03:05:22
【问题描述】:

在我的代码中,当某个异常发生时,我会返回

Response.AddHeader("X-Status", "çãõáéí");
Response.Charset = "utf-8";
Response.HeaderEncoding = Encoding.UTF8;
return new HttpStatusCodeResult(403, "You lack permission X, Y and Z");

在使用 Postman 时,我惊讶地看到了 3 件事:

  1. 响应的正文。它应该是空的..响应应该只包含标题,但正文实际上充满了 html/css...
  2. Content-Type 标头只是“text/html”而不是“text/html charset=utf-8”
  3. 没有任何迹象表明“Response.HeaderEncoding”已设置...无论是设置为 utf8 还是 utf32 还是 big-indian...

那么,我怎样才能“让”身体空虚呢?意思是我希望回复的内容清楚...如果您能够教我编码X-Status,则加分,以便浏览器正确显示特殊字符,而不是像倒置的问号...

【问题讨论】:

  • 在空白项目中测试您的代码时,您似乎得到了 403 的 IIS 错误页面。仍在寻找解决方案,但我不确定您如何绕过这些错误页面。

标签: c# asp.net asp.net-mvc


【解决方案1】:

看起来并不明显,但为了绕过 IIS 错误,您需要执行以下操作:

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto">
    <remove statusCode="403" />
  </httpErrors>
</system.webServer>

基本上,您需要覆盖/删除您返回的错误代码的默认处理程序(在本例中为 Forbidden/403)。否则,您的 403 响应将触发 IIS 的错误处理,您会得到:

我认为这是不言自明的。

这确实引入了另一个问题:这是站点范围的。 可能可以在每个操作的基础上处理响应代码(可能使用过滤器,尽管这可能在管道中太远了),但我目前不确定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2015-11-17
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多