目录
1.创建文件夹Log并创建文件Log.txt用于存储异常捕获注意Log.txt需要在电脑文件夹内添加,
2.接下来更改App_Start下的FilterConfig.cs
介绍
本此练习最终实现将错误异常写入日志
简单尝试
尝试书写捕获代码将Error输出到网页界面
HomeController.cs文件下代码
public ActionResult Index()
{
try
{
throw new Exception();
}
catch(Exception ex) {
Response.Write("Error");
return null;
}
}
运行效果会在网页界面显示Error
进阶练习
实现功能
1.创建文件夹Log并创建文件Log.txt用于存储异常捕获注意Log.txt需要在电脑文件夹内添加,
Visual Studio 资源管理器下不能直接添加。
同时创建Filters文件ErrorAttibute类实现存入日志操作
代码如下
public class ErrorAttibute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
string url = filterContext.HttpContext.Request.MapPath("~/Log/Log.txt");
string errorMessage=filterContext.Exception.ToString();
System.IO.File.AppendAllText(url, DateTime.Now.ToString() + ":" + errorMessage+"\n\n");
ViewResult viewResult = new ViewResult();
viewResult.ViewName = "Error";
viewResult.ViewBag.error=filterContext.Exception.Message.ToString();
filterContext.Result = viewResult;
filterContext.ExceptionHandled = true;
}
}
2.接下来更改App_Start下的FilterConfig.cs
注意“ErrorAttibute”名称必须与Filters下的类文件一致
代码中public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ErrorAttibute());
filters.Add(new HandleErrorAttribute());
}
//添加filters.Add(new ErrorAttibute());
filters.Add(new ErrorAttibute())
这行代码的作用是向全局过滤器集合中添加一个自定义的错误过滤器,该过滤器可能会处理应用程序中的特定错误或执行某些定制的错误处理逻辑。通常,开发人员会根据应用程序的需求添加自定义的全局过滤器,以实现特定的功能或行为,比如记录错误日志、发送邮件通知等。
3.在Controller文件下创建Default
控制器
它的作用在Default
控制器中的Index
动作方法中,发生了除以零的错误,可能会抛出一个异常。ErrorAttibute
特性可能会捕获这个异常,并执行相应的错误处理逻辑
Default
控制器的代码如下
[ErrorAttibute]
public class Default : Controller
{
public ActionResult Index() {
int i = 1;
int j = 1;
int k=i/j;
return View();
}
}
这个错误处理逻辑可能会将错误信息记录到日志中、向用户显示友好的错误页面,或者采取其他合适的操作来处理异常情况,以确保应用程序的稳定性和可靠性。
4.接下来更改web.config
该文件以及添加代码如下图
5.更改HomeController.cs文件下代码为尝试将Error路径书写错误
注意显示return后代码要用View不然捕获不到
public ActionResult Index()
{
try
{
throw new Exception();
}
catch(Exception ex) {
return View("/Views/Shared/Error");
}
}