using System;
using System.Text;
using EMS.Domains.Core;
using System.Web.Mvc;
using Json.Net;
using Util.Webs;
using Json = Util.Json; namespace EMS.MvcUI.Base
{
public class FilterExceptionAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
var isAjax = filterContext.HttpContext.Request.IsAjaxRequest();
if (isAjax)
{
if (filterContext.Exception is ShowException)
{
filterContext.Result = new ContentResult
{
Content =
JsonConvert.SerializeObject(
new {Code = StateCode.Fail, Message = filterContext.Exception.Message, Data = ""})
};
}
else
{
filterContext.Result = new ContentResult
{
Content =
JsonConvert.SerializeObject(new {Code = StateCode.Fail, Message = "服务器异常,请联系管理员", Data = ""})
};
}
}
if (!(filterContext.Exception is ShowException))
{
WriteLog(filterContext);
}
filterContext.ExceptionHandled = true;
} private Exception BuildErrorMessage(Exception ex)
{
while (ex.InnerException != null)
{
ex = ex.InnerException;
}
return ex;
} private void WriteLog(ExceptionContext filterContext)
{
var httpContext = filterContext.RequestContext.HttpContext.Request;
var ex = BuildErrorMessage(filterContext.Exception);
// 在出现未处理的错误时运行的代码
StringBuilder _builder = new StringBuilder();
_builder.Append("\r\n------------- 异常信息 ---------------------------------------------------------------");
_builder.Append("\r\n发生时间:" + DateTime.Now.ToString());
_builder.Append("\r\n发生异常页:" + httpContext.Url.ToString());
_builder.Append("\r\n异常信息:" + ex.Message);
_builder.Append("\r\n错误源:" + ex.Source);
_builder.Append("\r\n堆栈信息:" + ex.StackTrace);
_builder.Append("\r\n-----------------------------------------------------------------------------------------\r\n");
//日志物理路径 DateTime date = DateTime.Now;
string path = httpContext.MapPath("~/Log/");
string month = date.ToString("yyyy-MM");
if (!System.IO.Directory.Exists(path + month))
System.IO.Directory.CreateDirectory(path + month);
string currentDate = date.ToString("yyyy-MM-dd");
string savePath = path + month + "/" + currentDate + ".log";
System.IO.File.AppendAllText(savePath, _builder.ToString(), System.Text.Encoding.Default);
//filterContext.RequestContext.HttpContext.Server.ClearError();
//filterContext.ExceptionHandled = true; //filterContext.RequestContext.HttpContext.Response.Redirect("/Home/Error");
} }
}

Mvc异常处理器的更多相关文章

  1. 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)

    我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...

  2. spring mvc 异常统一处理方式

    springMVC提供的异常处理主要有两种方式: 一种是直接实现自己的HandlerExceptionResolver: 另一种是使用注解的方式实现一个专门用于处理异常的Controller——Exc ...

  3. 关于SpringMVC的全局异常处理器

    近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...

  4. SpringMVC框架笔记02_参数绑定返回值文件上传异常处理器JSON数据交互_拦截器

    目录 第1章 高级参数的绑定 1.1 参数的分类 1.2 数组类型的参数的绑定 1.3 集合类型的参数的绑定 第2章 @RequestMapping的用法 2.1 URL路径映射 2.2 请求方法限定 ...

  5. 基于SpringMVC的全局异常处理器介绍(转)

    近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...

  6. SpringMVC实现全局异常处理器 (转)

    出处:  SpringMVC实现全局异常处理器 我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手 ...

  7. 【SpringMVC】文件上传与下载、拦截器、异常处理器

    文件下载 使用ResponseEntity实现下载文件的功能 index.html <!DOCTYPE html> <html lang="en" xmlns:t ...

  8. spring设置全局异常处理器

    1.spring设置全局异常,它的原理是向上捕获 spring.xml配置 <!--自定义全局异常处理器--> <bean id="globalExceptionResol ...

  9. Java 线程异常处理器

    Thread.UncaughtExceptionHandler 是Thread类的一个静态内部接口,该接口只有一个方法: void uncaughtException(Thread t, Throwa ...

随机推荐

  1. 《HTTP2基础教程》笔记

    <HTTP2基础教程>笔记 HTTP/1问题 队头阻塞 低效TCP 慢启动 拥塞避免阶段 臃肿头部 受限的优先级 高优先级无法插队 第三方资源 h2也无法很好解决 web性能优化 DNS查 ...

  2. 【LeetCode】011 Container With Most Water

    题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...

  3. tyvj1124花店橱窗——有限制的DP

    题目:http://www.joyoi.cn/problem/tyvj-1124 此题首先注意一束花能往哪些花瓶中放置:原本应放在本位置,但因为有多余花瓶,故可以有些变动,范围在i~i+v-f间: 假 ...

  4. jdk、tomcat如何配置环境变量

    一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...

  5. noip2011普及组:统计单词

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位 置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在 ...

  6. caffe 逐步调试

    caffe 逐步调试 https://www.zhihu.com/question/27982282

  7. 按钮交互loading ---- 转圈圈 加载

    按钮loading状态自定义选项(功能): 可以在元素上添加 data-am-loading 来设置选项: spinner 加载动画图标,适用于支持 CSS3 动画.非 input 元素,写图标名称即 ...

  8. jquery中对于批量deferred的处理

    此代码仿照jquery源码中$.when()的实现 function test(i) { var dfd = $.Deferred(); if(i%2 == 0) { console.log(&quo ...

  9. 用expressjs写RESTful API

    http://blog.csdn.net/kiwi_coder/article/details/36424671     用expressjs写RESTful API http://blog.csdn ...

  10. 3.7-3.9 HBase表属性

    一.表压缩 1.HBase Sanppy HBase Sanppy 1)配置Haodop压缩 [beifeng@hadoop-senior hadoop-2.5.0]$ bin/hadoop chec ...