Mvc异常处理器
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异常处理器的更多相关文章
- 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)
我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...
- spring mvc 异常统一处理方式
springMVC提供的异常处理主要有两种方式: 一种是直接实现自己的HandlerExceptionResolver: 另一种是使用注解的方式实现一个专门用于处理异常的Controller——Exc ...
- 关于SpringMVC的全局异常处理器
近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...
- SpringMVC框架笔记02_参数绑定返回值文件上传异常处理器JSON数据交互_拦截器
目录 第1章 高级参数的绑定 1.1 参数的分类 1.2 数组类型的参数的绑定 1.3 集合类型的参数的绑定 第2章 @RequestMapping的用法 2.1 URL路径映射 2.2 请求方法限定 ...
- 基于SpringMVC的全局异常处理器介绍(转)
近几天又温习了一下SpringMVC的运行机制以及原理 我理解的springmvc,是设计模式MVC中C层,也就是Controller(控制)层,常用的注解有@Controller.@RequestM ...
- SpringMVC实现全局异常处理器 (转)
出处: SpringMVC实现全局异常处理器 我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手 ...
- 【SpringMVC】文件上传与下载、拦截器、异常处理器
文件下载 使用ResponseEntity实现下载文件的功能 index.html <!DOCTYPE html> <html lang="en" xmlns:t ...
- spring设置全局异常处理器
1.spring设置全局异常,它的原理是向上捕获 spring.xml配置 <!--自定义全局异常处理器--> <bean id="globalExceptionResol ...
- Java 线程异常处理器
Thread.UncaughtExceptionHandler 是Thread类的一个静态内部接口,该接口只有一个方法: void uncaughtException(Thread t, Throwa ...
随机推荐
- Chrome检查更新总失败?安装细则讲解
现在 Google Chrome 的稳定版都已经发布 68.0 版本了,我机上还是 54, 本想在线更新一下,结果点击菜单项中的“关于 Google Chrome”后,进入的界面提示“更新失败(错误: ...
- OGG 11g Checkpoint 详解
OGG Checkpoint 详解 定位中断的位置,下次启动从中断的位置开始恢复. 1.target 端配置: 2.一条记录对应一个replicat 一. Extract Check ...
- Java远程调用
一. 概念: RMI全称是Remote Method Invocation-远程方法调用,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.它支持 ...
- CentOS6.6中安装VNC server(CentOS配置远程桌面)
1.安装服务 yum install tigervnc-server 1 2 名字有点怪哦,CentOS5前叫vnc-server 2.运行并设置密码 vncserver + 回车 1 2 输入密码, ...
- 手把手教你上传文件到GitHub并发布到pod
第一步:定位到要上传到GitHub的文件夹, 第二步:GitHub中建立一个仓库,用于存放项目. 第三步:建立podspec文件, pod spec create openinstall 然后修改里面 ...
- Aspose.words写表格时多出空格的问题
通过aspose.words创建表格时,每一个表格总是有一个制表符,和空格差不多,经过查找原因如下: 我是先通过书签找到需要插入表格的位置,在这个位置开始写表格的操作.问题出在书签上,这个书签在创建的 ...
- 当在hive中show table …
当在hive中show table 时如果报以下错时 FAILED: Error in metadata: javax.jdo.JDODataStoreException: Error(s) were ...
- 转载TCP-IP协议解释
本文转载自 http://www.ruanyifeng.com/blog/2009/03/tcp-ip_model.html TCP/IP模型是互联网的基础, 理解 TCP/IP对理解互联网至关重要 ...
- Gridview 每秒刷新数据
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx. ...
- javascript中的scroll事件
window.addEventListener('scroll',function(){ if(document.compatMode == "CSS1Compat") { ale ...