码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET mvc异常处理的方法

时间:2015-10-16 23:10:33      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

第一种:全局异常处理

 

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

 
C# 代码   复制
技术分享技术分享
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类

 
C# 代码   复制
技术分享技术分享
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.编写控制器,让其继承自上面的异常基类

 
C# 代码   复制
技术分享技术分享
public class ExceptionController : BaseExceptionController
技术分享技术分享
   {
技术分享
技术分享       public ActionResult Index()
技术分享
技术分享       {
技术分享
技术分享           throw new Exception("我抛出异常了!");//这个是为了查看结果故意抛出的异常
技术分享
技术分享       }
技术分享
技术分享   }
技术分享

 

通过上面的方式可以对整个控制器中的action都能进行异常的获取,但是这种方式不太灵活,那么就看第二种方式

 

第二种:控制器异常处理

 

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

 

 
C# 代码   复制
技术分享技术分享
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使用异常处理呢?那么我们就要用到下面的过滤器异常处理来进行。

 

第三种:过滤器异常处理

 
C# 代码   复制
技术分享技术分享
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();
技术分享
技术分享   }
技术分享
技术分享}
技术分享

 

第四种:路由异常处理

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

 

第五种:动作异常处理

 

 
C# 代码   复制
技术分享技术分享
//首先设置:
技术分享技术分享
 <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();
技术分享
技术分享       }
技术分享

 http://www.studyofnet.com/news/317.html

ASP.NET mvc异常处理的方法

标签:

原文地址:http://www.cnblogs.com/fuqiang88/p/4886606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!