ASP.NET mvc异常处理的方法

来源:互联网 发布:社会网络理论有什么用 编辑:程序博客网 时间:2024/05/16 11:41

第一种:全局异常处理

1.首先常见保存异常的类(就是将异常信息写入到文件中去)

   public class LogManager   {       private string logFilePath = string.Empty;       public LogManager(string logFilePath)       {           this.logFilePath = logFilePath;           FileInfo file = new FileInfo(logFilePath);           if (!file.Exists)           {               file.Create().Close();           }       }       public void SaveLog(string message, DateTime writerTime)       {           string log = writerTime.ToString() + ":" + message;           StreamWriter sw = new StreamWriter(logFilePath, true);           sw.WriteLine(log);           sw.Close();       }   }

2.编写一个异常的基类让其继承自controller类

public class BaseExceptionController : Controller   {       protected override void OnException(ExceptionContext filterContext)       {           LogManager logManager = new LogManager(Server.MapPath("~/Exception.txt"));           logManager.SaveLog(filterContext.Exception.Message, DateTime.Now);           base.OnException(filterContext);       }   }
3.编写控制器,让其继承自上面的异常基类

public class ExceptionController : BaseExceptionController   {       public ActionResult Index()       {           throw new Exception("我抛出异常了!");//这个是为了查看结果故意抛出的异常       }   }
通过上面的方式可以对整个控制器中的action都能进行异常的获取,但是这种方式不太灵活,那么就看第二种方式

第二种:控制器异常处理

这种方式就在需要进行异常处理的controller中重写OnException()方法即可,因为它本身继承了IExceptionFilter接口

public class ExceptionController : Controller   {       public ActionResult Index()       {           throw new Exception("我抛出异常了!");       }       protected override void OnException(ExceptionContext filterContext)       {           string filePath = Server.MapPath("~/Exception。txt");           StreamWriter sw = System.IO.File.AppendText(filePath);           sw.WriteLine(DateTime.Now.ToString() + ":" + filterContext.Exception.Message);           sw.Close();           base.OnException(filterContext);           Redirect("/");       }   }
前面两种都是在controller中重写OnException方法,这样只要controller中又异常,那么就会被捕捉并被处理,但是如果我们要针对某个action使用异常处理呢?那么我们就要用到下面的过滤器异常处理来进行。

namespace MyMVC.Controllers{   public class ExceptionController : Controller   {       [Error]       public ActionResult Index()       {           throw new Exception("过滤器异常!");       }   }}public class ErrorAttribute : HandleErrorAttribute{   public override void OnException(ExceptionContext filterContext)   {       base.OnException(filterContext);       string path = filterContext.HttpContext.Server.MapPath("~/Exception.txt");       StreamWriter sw = System.IO.File.AppendText(path);       sw.WriteLine(DateTime.Now.ToString()+":"+filterContext.Exception.Message);       sw.Close();   }}

第四种:路由异常处理

//设置路由参数routes.MapRoute("ErrorHandling", "{*str}", new { controller = "Exception", action = "Missing" });//一定要放在所有配置的最下面、public ActionResult Missing(string str)       {           ViewData["ErrMsg"] = "您访问的页面出错了,"+str+" 时间:"+DateTime.Now.ToString();           return View();       }

第五种:动作异常处理

//首先设置: <system.web>   <customErrors mode="On">     <error statusCode="404" redirect="/Exception/Missing"/>   </customErrors> </system.web>       public ActionResult Missing(string str)       {           ViewData["ErrMsg"] = "您访问的页面出错了,"+str+" 时间:"+DateTime.Now.ToString();           return View();       }



0 0
原创粉丝点击