设置响应状态代码会导致自定义错误页面顶部出现不需要的错误文本

Setting Response status code causes unwanted error text at top of custom error page

更新:

为确保向浏览器返回正确的状态码,error.aspx 有这一行:

<% Response.StatusCode = 500; %>

删除它会删除不需要的文本,但我想要正确的状态代码,所以我想这是新问题...如何!?

设置响应状态码结果相同:

HttpContext.Current.Response.StatusCode = 500;

将更新问题标题。

PRE-UPDATE:

由于一些遗留问题 code/configuration,我们有一个稍微不寻常的自定义错误页面设置,它处理 global.asax 中的异常并使用 Server.Transfer() 显示适当的 .aspx 错误页面,像这样:

public void Application_Error(object sender, EventArgs e)
{
    // abbreviated to clear out logging and some other logic that determines which error page to show

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Server.ClearError();

    var context = HttpContext.Current;
    if (context != null)
    {
        var errorPage = "~/ErrorPages/error.aspx";
        context.Server.Transfer(errorPage);
    }
}

问题是,当 error.aspx 显示给 远程用户 时,一条错误消息(和一个新的打开 body 标签...)是放在页面前面,所以页面的第一行是无样式的文本:

The page cannot be displayed because an internal server error has occurred.

不太理想,而且,虽然我可能在谷歌上搜索了错误的东西,但它似乎不是一个有据可查或经常讨论的问题。

欢迎任何想法。 error.aspx 代码非常通用,但如果有帮助,我很乐意 post - 请发表评论。

我在自定义登录和处理错误方面做了很多工作。学到了很多。现在我在 Linux 并且无法给出准确的响应,但我建议查看 HttpResponse 访问器和 HttpResponse.Write() 方法。它将不假装地替换错误页面的全部内容。

另外,您可以在 web.config 文件中设置此页面。

已添加: 输入你的 web.config 这个:

<configuration>
    <system.webServer>
        <httpErrors>
            <remove statusCode="500" />
        </httpErrors>
    </system.webServer>
</configuration>

你试过了吗End the request

HttpContext.Current.Response.End()

MSDN Response.End():将所有当前缓冲的输出发送到客户端,停止页面的执行,并引发 EndRequest 事件。

修复方法是将其添加到 web.config:

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

基于这个答案:

IIS7 Overrides customErrors when setting Response.StatusCode?

还有这个博客post:

http://blogs.iis.net/ksingla/what-to-expect-from-iis7-custom-error-module