第一种:全局异常处理
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