当用户尝试上传对服务器来说太大的文件时,我试图更优雅地错误输出。但是,当我尝试捕获Global.asax.cs中的错误时,它似乎跳过我的重定向代码。这是我所拥有的核心。
protected void Application_Error(object sender, EventArgs e)
{
HttpContext.Current.ClearError();
Response.Redirect("CustomErrors.aspx", false);
Context.ApplicationInstance.CompleteRequest();
}
无处不在,我看起来'回答'似乎是为了清除错误,但我已经做到了。还有什么可能出错的。有什么想法吗?
答案 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