即使清除错误,也无法从Application_Error重定向

时间:2013-12-14 05:39:29

标签: c# asp.net application-error

当用户尝试上传对服务器来说太大的文件时,我试图更优雅地错误输出。但是,当我尝试捕获Global.asax.cs中的错误时,它似乎跳过我的重定向代码。这是我所拥有的核心。

protected void Application_Error(object sender, EventArgs e)
{
   HttpContext.Current.ClearError();
   Response.Redirect("CustomErrors.aspx", false);
   Context.ApplicationInstance.CompleteRequest();
}

无处不在,我看起来'回答'似乎是为了清除错误,但我已经做到了。还有什么可能出错的。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我知道这是一个较旧的帖子,但我找到了解决这个问题的方法......

在下面的情况下,谷歌机器人传递了错误的网址字符,我只想重定向到默认值。

陷阱错误Server.ClearError();然后您可以重定向到您网站上的任何页面。

void Application_Error(object sender, EventArgs e)
{
    //... other code here....

    var Message = ex.Message.ToLower();
    var RootURL = Common.GetAppPathMasterPages() + "default.aspx";

    if (Message.Contains("does not exist") || Message.Contains("potentially dangerous request"))
    {
        Server.ClearError();
        HttpContext.Current.Response.Redirect(RootURL);
        return;
    }    

}

答案 1 :(得分:0)

我刚刚尝试了您的代码,当我在测试页的Page_Load()中引发未处理的错误,然后尝试使用HttpContext.Current.ClearError()方法中的Application_Error()重定向时,我收到了

  

在HTTP标头发送错误后无法重定向

删除此ClearError()方法可解决此问题。

但是,如果我在页面上的事件中引发事件(即单击按钮),即使调用HttpContent.Current.ClearError(),这也可以正常工作。

我注意到的一件事是你在'CustomError.aspx'前面没有'〜/',你可能想要添加它,这样无论错误发生在哪里都可以找到页面。 (我想我有多个文件夹,发生错误,上下文将在当前文件夹中)。

添加自定义错误页面的更好方法是使用必要的配置修改web.config,这将为您执行重定向。然后,您仍然可以在Application_Error()方法中记录错误(通过Log4Net或等效文件)。您可以找到此question,如果您想在自定义错误页面上显示例外,则会很有帮助。

从此link

<configuration>
    ...

    <system.web>
        <customErrors mode="RemoteOnly"
                      defaultRedirect="~/ErrorPages/Oops.aspx" />

        ...
    </system.web>
</configuration>

答案 2 :(得分:0)

另一种方法是确保设置以下内容。

Response.BufferOutput = true;

这样,在响应准备好发送之前,不会发送响应(包括标头)。

见这里。

Server cannot set status after HTTP headers have been sent IIS7.5