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");
} }
}

C# Mvc异常处理过滤器的更多相关文章

  1. ASP.NET MVC异常处理

    ASP.NET MVC异常处理方案 如何保留异常前填写表单的数据 ASP.NET MVC中的统一化自定义异常处理 MVC过滤器详解 MVC过滤器使用案例:统一处理异常顺道精简代码 ASP.NET MV ...

  2. ASP.NET mvc异常处理的方法

    第一种:全局异常处理 1.首先常见保存异常的类(就是将异常信息写入到文件中去) public class LogManager { private string logFilePath = strin ...

  3. 统一的mvc异常处理

    mvc异常处理 using System; using System.Configuration; using System.Web.Mvc; using Infrastructure.Excepti ...

  4. Asp.net MVC 之过滤器

    整理一下MVC中的几种过滤器,以及每种过滤器是干什么用的 四种过滤器 1.AuthorizationFilter(授权过滤器) 2.ActionFilter(方法过滤器) 3.ResultFilter ...

  5. NET MVC异常处理模块

    一个简单的ASP.NET MVC异常处理模块   一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行. ...

  6. Asp.Net MVC part45 过滤器、模板页

    过滤器 使用方式自定义类继承自相应的类或接口,重写方法,作为特性使用在控制器类中重写方法 特性方式的使用注意:如果继承自接口需要让类实现FilterAttribute,才可以作为特性使用使用方式1:作 ...

  7. 使用ASP.NET MVC操作过滤器记录日志(转)

    使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...

  8. 爱上MVC系列~过滤器实现对响应流的处理

    回到目录 MVC的过滤器相信大家都用过,一般用来作权限控制,因为它可以监视你的Action从进入到最后View的渲染,整个过程ActionFilter这个过滤器都参与了,而这给我们的开发带来了更多的好 ...

  9. ASP.NET MVC : Action过滤器(Filtering)

    http://www.cnblogs.com/QLeelulu/archive/2008/03/21/1117092.html ASP.NET MVC : Action过滤器(Filtering) 相 ...

随机推荐

  1. MS SQL SERVER导出表结构到Excel

    通过sql语句导出表结构 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.co ...

  2. Python后台分页删除编辑查询

    「POST 数据」通常指 POST 时 body 中的数据.而 QueryString (URL)中也有可以带参数(通常是 GET 时的参数).如果 POST 时同时存在 QueryString 和 ...

  3. MYSQL的大数据量情况下的分页查询优化

    最近做的项目需要实现一个分页查询功能,自己先看了别人写的方法: <!-- 查询 --> <select id="queryMonitorFolder" param ...

  4. JNI开发的常见错误

    1. 写错了load的library java.lang.UnsatisfiedLinkError: Couldn't load hell0: findLibrary returned null 2. ...

  5. HTML学习

    <!DOCTYPE html> <html> <head> <title>标题</title> <meta charset=" ...

  6. kailli linux download

    https://www.offensive-security.com/kali-linux-arm-images/ Courses Certifications Online Labs Penetra ...

  7. PHP 文件限速下载代码

    php 文件限速下载代码 <?php include("DBDA.class.php"); $db = new DBDA(); $bs = $_SERVER["QU ...

  8. Believe Me , I Can !

    Believe Me , I Can ! ---DF 第一阶段:(年底1-27之前) 1.  熟练使用JavaScript/CSS/HTML,熟悉HTML5 / CSS3: 2.  熟悉JavaScr ...

  9. 网站设置404页面 --nginx

    有的时候根据域名要先知道用的什么web 服务器 最简单的 http://tool.chinaz.com/pagestatus/  输入域名,看返回的头部信息 用的那个web浏览器 下面的方法也是根据头 ...

  10. Yii2 定时任务创建(Console 任务)

    Yii2的定时任务可以有两种写法,原理都是通过服务器的定时任务去调用 1.通过调用指定的URL访问 就相当于在浏览器中访问 2.通过console调用 下面我们就来说说Console 是如何实现定时任 ...