网络配置:
<customErrors mode="On" defaultRedirect="~/Foo.aspx" />
当 Foo.aspx.cs 运行时,我怎么知道是一个未捕获的异常将我发送到 Foo.aspx?
网络配置:
<customErrors mode="On" defaultRedirect="~/Foo.aspx" />
当 Foo.aspx.cs 运行时,我怎么知道是一个未捕获的异常将我发送到 Foo.aspx?
检查Server.GetLastError()
并检查Response.StatusCode
以确定页面被调用的原因。
如果您设置页面上的元素customErrors
仅在出现未知状态时调用,即如果您为状态码 404 和 403 指定自定义页面,则仅在出现不同状态时才会调用您的页面。web.config
defautRedirect
foo.aspx
代码:
if (!string.IsNullOrEmpty(Request["aspxerrorpath"])) {
....
}
我希望有更好的东西?
void Application_Error(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
Exception exception = ctx.Server.GetLastError();
ctx.Server.ClearError();
ctx.Server.Transfer("Foo.aspx?ERROR" + exception.Message);
}
此方法将在您转到 Foo.aspx 之前触发,因此您可以发现您来自错误而不是重定向。然后,您可以将 QueryString 变量附加到 url,以便 Foo.aspx 可以使用该数据。
不确定您的最终目标是什么,但是如果您尝试根据异常自定义错误消息,您可以通过这种方式处理它。