ASP.NET mvc异常处理的方法
类别:编程学习 浏览量:6312
时间:2014-3-2 ASP.NET mvc异常处理的方法
ASP.NET mvc异常处理的方法第一种:全局异常处理
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();
}
您可能感兴趣
- MVC升级后报"当前上下文中不存在ViewBag"错的解决方法
- mysql mvcc 流程(Mysql MVCC机制原理详解)
- mysql mvcc 底层原理(浅析MySQL - MVCC)
- MVC中outputcache缓存
- mvc renderpartial
- MVC中JSON字符长度超出限制
- php框架初始化教程学习(PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解)
- MVC上传文件的方法
- iiS7中如何部署MVC3程序
- 使用RouteDebugger对MVC路由进行调试
- mvc中Scripts.Render、Styles.Render
- mvc中使用uploadify批量上传
- mvc中validateinput属性失效
- MVC中报get_RazorKeywords()错误的解决方法
- php框架使用方法大全(PHP MVC框架中类的自动加载机制实例分析)
- mvc中@helper的用法
- 靳东领衔打造高精职场 新丽出品《精英律师》曝定妆照(靳东领衔打造高精职场)
- 靳东新剧《精英律师》定档,众星云集,这剧可追(靳东新剧精英律师定档)
- 精英律师 廖佳敏封印恋情曝光,顾婕马失前蹄 你个老不死的(廖佳敏封印恋情曝光)
- 以家人之名广受好评,剧情生动引起观众共鸣,演员张新成圈粉无数(以家人之名广受好评)
- 三兄妹感情再遇波折,人设接连崩塌 《以家人之名》剧情猜不透(三兄妹感情再遇波折)
- 《小敏家》金波想要复婚 这只是他圈套的第1步,更可恶的在后面(小敏家金波想要复婚)
热门推荐
- windowsserver2012设置ftp账户(Windows Server 2012安装ftp服务器图文教程)
- dedecms专题列表(DedeCMSV6重磅发布!同步开启全新商业开发者计划)
- mysql 查询json(MySQL处理JSON常见函数的使用)
- mysqlworkbench怎么设置连接(详解MySQL Workbench使用教程)
- laravel循环插入数据(Laravel 实现关系模型取出需要的字段)
- linuxgzip命令(Linux bzip2 命令的使用)
- react高阶组件怎么用(React 高阶组件HOC用法归纳)
- canvas图片显示报错(html2canvas生成的图片偏移不完整的解决方法)
- docker-compose启动超时(docker compose idea CreateProcess error=2 系统找不到指定的文件的问题)
- python测试websocket接口(Python如何爬取实时变化的WebSocket数据的方法)