在Global.asax app_error中捕获异常

时间:2011-05-03 15:59:05

标签: c# asp.net exception error-handling response

我在asp.net和C#中有Web应用程序

如果异常发生在此应用程序的任何位置,我会尝试处理异常。

比如假设行为应该是if和这样的异常发生

//generate your fictional exception
            int x = 1;
            int y = 0;
            int z = x / y;

它应该在global.ascx文件的app_error中捕获它并将其重定向到Default.aspx页面。我得到了记录部分,但重定向不起作用,因为我仍然得到

  '/'应用程序中的服务器错误。   页。或者可能是重定向并在中间被杀..

这就是global.ascx

中的内容
 protected void Application_Error(object sender, EventArgs e)
    {
        logger.Fatal(this.Server.GetLastError().GetBaseException());
        logger.Info("FatalLogger Passed");
        //get reference to the source of the exception chain
        Exception ex = Server.GetLastError().GetBaseException();
        Response.Redirect("~/Default.aspx?error=MessageHere");
    }

这在web.config中的代码中

<authentication mode="Forms">
        <forms loginUrl="Login.aspx" defaultUrl="~/Default.aspx" name="GUI" slidingExpiration="true" timeout="30" path="/">
        </forms>
    </authentication>

任何想法..生病;很乐意提供更多信息。

由于

好吧我想要这种方法是有原因的,因为无论何时出现错误,用户都会退出,我不希望这种情况发生,而是转到默认页面

3 个答案:

答案 0 :(得分:1)

配置custom error pages

顺便说一句,我推荐ELMAH for the logging part ...

答案 1 :(得分:1)

您是否尝试在Application_Error中重定向之前调用Server.ClearError()?我玩这个已经有一段时间,但我相信如果你不调用ClearError,那么框架仍然认为错误是未处理的。

答案 2 :(得分:0)

尝试使用Server.Transfer(page)

还要小心通过查询字符串传递错误消息,因为它可以打开你的XSS问题。传递错误代码,然后根据代码显示消息(使用switch语句)