ASP.NET MVC统一异常处理
前言:
今早看了篇文章:求知成瘾,却无作品 的思考;很有感触,发现原来自己也是这样,对每样东西都抱有很大的兴趣或者希望自己去学,一年后发现原来自己什么都是皮毛什么都不精!最终发现真正的大牛都是在某一个领域的大牛,不会是全能的。所以是时候精一下了。
本篇文章来源于今天的另外一篇阅读:《我的软件没bug》作者希望读者写的程序即使已经上线也能快速的发现自己bug而不是等着用户忍无可忍时的反馈,这样让用户产生错觉是其用的软件并没有bug,而能实现这些最关键的一点就是能不能发现bug。所以小猪今天写了其实已经关注非常久的一个主题:统一的异常处理
实现
ASP.NET MVC提供了很方便的实现处理异常的机制:在需要进行异常处理的Controller中重写OnException。如果整个程序都需要异常处理,可以先写一个BaseController,其他所有Controller都继承它,然后在BaseController中重写OnException。
protected override void OnException(ExceptionContext filterContext)
{
Log(filterContext);
base.OnException(filterContext);
} private void Log(ExceptionContext filterContext)
{
string fileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, exceptionFileName);
StreamWriter sw = System.IO.File.AppendText(fileName); System.DateTime dt = DateTime.Now;
string ip = RY.Common.IPHelp.ClientIP;
string url = Request.Url.ToString();
sw.Write(string.Format("Time:{0:G}; ClientIp:{1}; URL:{2}; Message:{3}\n", dt, ip, url, filterContext.Exception.Message));
sw.Close();
}
然后让自己的Controller继承自这个BaseController即可。
另外如果只是针对某一个Action的捕获异常则可以写一个Attribute继承自HandleErrorAttribute:
public class ExceptionLogAttribute:HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
}
}
存数据库还是文件
细心的读者可能发现上述的代码小猪是保存在网站跟文件夹下的一个文件里的。这里涉及到把异常数据保存在什么地方的问题。有两种选择数据库和文件。但是小猪考虑到存数据库时存在一个问题:当数据库无法链接时网站也是会报错,这个时候的错误如果是采用存在数据库的机制的话则无法记录,而存在文件里则不存在这个问题,除非是web服务器奔了。综上原因小猪采取了把日志文件存放在文件里的方法。
ASP.NET MVC统一异常处理的更多相关文章
- Spring MVC 统一异常处理
Spring MVC 统一异常处理 看到 Exception 这个单词都心慌 如果有一天你发现好久没有看到Exception这个单词了,那你会不会想念她?我是不会的.她如女孩一样的令人心动又心慌,又或 ...
- 使用Spring MVC统一异常处理实战
1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- 使用Spring MVC统一异常处理实战<转>
1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- 使用Spring MVC统一异常处理实战(转载)
原文地址:http://blog.csdn.net/ufo2910628/article/details/40399539 种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMa ...
- Asp.net MVC 之异常处理
对于Asp.Net MVC 项目中,对于异常情况下,会跳转到自己定义好的页面,这时就用到了MVC中的异常过滤器(Exception Filters) (1)一旦action 方法中出现异常,异常过滤器 ...
- MVC 统一异常处理
在出现异常时,我们不希望将错语的原因让客户看见,常常会做一个404错误页面,将所有发生的异常都跳至该页面,并把异常信息写在日志中.步骤如下: 1.让我们看看Global.asax页面Applicati ...
- Spring MVC统一异常处理
实际上Spring MVC处理异常有3种方式: (1)一种是在Controller类内部使用@ExceptionHandler使用注解实现异常处理: 可以在Controller内部实现更个性化点异常处 ...
- spring MVC 统一异常处理(webapi和web分开处理)
转载: http://blog.csdn.net/m13321169565/article/details/7641978 http://blog.csdn.net/ethan_fu/article/ ...
- 从零开始学 Java - Spring MVC 统一异常处理
看到 Exception 这个单词都心慌 如果有一天你发现好久没有看到Exception这个单词了,那你会不会想念她?我是不会的.她如女孩一样的令人心动又心慌,又或者你已经练功到了孤独求败,等了半辈子 ...
随机推荐
- 三大域对象的使用总结request域 + session域 +
request域: servlet 产生数据显示完后,就没用了. session域:数据除了显示之外,等一会还要用. servletContext域: 数据除了显示之外不仅还要用还要给其他人用.
- MongoDB入门教程之C#驱动操作实例
实体类: using MongoDB.Bson; namespace WindowsFormsApp { class User { //public ObjectId _id; //BsonType. ...
- Scrum Meeting---Nine(2015-11-4)
今日已完成任务和明日要做的任务 姓名 今日已完成任务 今日时间 明日计划完成任务 估计用时 董元财 首页设计 3h 首页设计 3h 胡亚坤 好友聊天 2h 分类顶栏设计 2h 刘猛 好友搜索 2h 个 ...
- 原生js如何获取当前所加载网页的文件路径和名称
结合使用string对象中的substr()和lastIndexOf()方法. 当前页面路径:file:///C:/Users/Administrator/Desktop/test.html < ...
- ajax 、ajax的交互模型、如何解决跨域问题
1.ajax是什么? — AJAX全称为“AsynchronousJavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术. — 不是一种新技 ...
- django的安装和搭建
一.先下载pyton,配置下python的环境变量,这个很重要,然后下载django,解压到与python同一个根目录底下,进入django目录,运行python setup.py install安装 ...
- hibernate mysql写入中文乱码 解决
启动hibernate项目,自动创建表,插入数据之后发现写入表里的数据里的中文是乱码.按如下方法解决了: 修改数据库的字符集为UTF-8,这个可以通过mysql的客户端软件里右键要修改的数据库的属性更 ...
- boost线程的问题:
可以看看这里:http://blog.csdn.net/misskissc/article/details/9859753 我的总结: 1,用thread类来创建一个线程,它的构结函数 : (1)th ...
- vitamio框架
import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.MediaPla ...
- nexus 2.6需要jdk7才能跑起来
Java 6 Support EOLOracle's support for Java 6 ended in February 2013. Consequentially as of version ...