ASP .NET之Application_Error应用程序级异常处理

ASP .NET之Application_Error应用程序级异常处理

Application_Error在哪

建立一个空网站后,在根目录下右键-添加新项,搜索全局应用程序类(这里我选择C#,另一个是VB),如图所示
在这里插入图片描述
然后打开Global.asax,就会找到Application_Error这个方法,啦啦啦。
在这里插入图片描述

有关Global.asax

这个文件后缀为asax,是一个全局应用程序类,一个项目中可以没有,如果有,就只能有一个。

Application_Error怎么用

首先,啥也别问,先敲下如下代码

void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码
        
        //捕获异常
        Exception ex = Server.GetLastError().GetBaseException();

	/******自定义处理*/
	
	/****************/

        //清除异常
        Server.ClearError();
    }

捕获异常

Exception ex = Server.GetLastError().GetBaseException();

没有这行,你将不知道是什么错误。

清除异常
Server.ClearError();

没有这行,你的网站依旧会报错,因为没有把异常清除。

自定义处理

在这里,就可以写你的各种各样的异常处理,例如:输出一条异常信息。

void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码

        //捕获异常
        Exception ex = Server.GetLastError().GetBaseException();

        Response.Write("应用程序级的异常处理。<br/>" + ex.Message);

        //清除异常
        Server.ClearError();

    }

用throw来抛出一条异常

throw new IndexOutOfRangeException();

运行结果是这样的

在这里插入图片描述

将异常写入日志

接下来,我们用一个高端一点的方法

void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码

        //捕获异常
        Exception ex = Server.GetLastError().GetBaseException();

        //将异常写入日志
        System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();
        log.Source = "应用程序级异常处理";
        log.WriteEntry(ex.Message, System.Diagnostics.EventLogEntryType.Error);

        //清除异常
        Server.ClearError();

    }

这样我们就可以做到把异常写入系统日志。

你以为这就结束了吗,如果你就只是这样,当你运行你的网站,网站依旧会报错(没有捕获到异常!!!)

怎么才能真正写入呢?

打开我们的config文件
在这里插入图片描述
然后我们找到<system.web></system.web>标签,在其中添加如下代码:

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
      <error statusCode="403" redirect="NoAccess.htm"/>
      <error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>

如图
在这里插入图片描述

这样当页面发生403、404错误的时候,我们就可以捕获到异常并写入日志文件中。

运行结果如图:
在这里插入图片描述

End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值