asp.net mvc异常处理的不同方法_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > asp.net mvc异常处理的不同方法

asp.net mvc异常处理的不同方法

 2013/7/30 23:09:58  蒋叶湖  博客园  我要评论(0)
  • 摘要:第一种:全局异常处理1.首先常见保存异常的类(就是将异常信息写入到文件中去)publicclassLogManager{privatestringlogFilePath=string.Empty;publicLogManager(stringlogFilePath){this.logFilePath=logFilePath;FileInfofile=newFileInfo(logFilePath);if(!file.Exists){file.Create().Close();}
  • 标签:.net ASP.NET MVC 方法 net 异常处理 异常
第一种:全局异常处理 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都能进行异常的获取,但是这种方式不太灵活,那么就看第二种方式 第二种:控制器异常处理 1.这种方式就在需要进行异常处理的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();         }
发表评论
用户名: 匿名