您的位置:首页 > 编程语言 > ASP

ASP.NET mvc异常处理的方法

2016-05-09 22:26 302 查看
第一种:全局异常处理

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

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: