mvc异常处理

using System;
using System.Configuration;
using System.Web.Mvc;
using Infrastructure.Exceptions;
using log4net; namespace Infrastructure.Web.ActionFilters
{
/// <summary>
/// 统一处理Mvc站点异常过滤器
/// </summary>
public class UnifyMvcSiteHandleErrorAttribute: HandleErrorAttribute
{
private static readonly ILog Log = LogManager.GetLogger(typeof(UnifyMvcSiteHandleErrorAttribute));
public readonly string BootStrapError = "~/Views/Shared/BootStrapError.cshtml";
public MVCResultType MVCResultType { set; get; } public override void OnException(ExceptionContext filterContext)
{
if (filterContext == null || filterContext.ExceptionHandled)
return; Log.Error(filterContext.Exception.GetFriendlyMessage(),filterContext.Exception); if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
HandleAjaxRequestError(filterContext);
}
else if(filterContext.Exception.IsTipException())
{
HandleRequestWithTipException(filterContext);
} base.OnException(filterContext);
}
/// <summary>
/// 处理Ajax请求产生的错误
/// </summary>
/// <param name="filterContext"></param>
private void HandleAjaxRequestError(ExceptionContext filterContext)
{
var message = GetMessage(filterContext.Exception); filterContext.Result = BuildActionResultWithErrorMessage(filterContext, message); filterContext.HttpContext.Response.StatusCode = ;
filterContext.ExceptionHandled = true;
}
/// <summary>
/// 构建包含错误信息的动作结果
/// </summary>
/// <param name="filterContext"></param>
/// <param name="message"></param>
/// <returns></returns>
private ActionResult BuildActionResultWithErrorMessage(ExceptionContext filterContext, string message)
{
var actionName = (string) filterContext.RouteData.Values["action"]; if (MVCResultType == MVCResultType.PartialHtml || actionName.EndsWith("Partial"))
{
return new ContentResult() {Content = message};
} if (MVCResultType == MVCResultType.BootStrapModal)
{
return new PartialViewResult()
{
ViewName = BootStrapError,
ViewData = new ViewDataDictionary<string>(message)
};
} return new JsonResult()
{
Data = new {success = false, message, flag = false, msg = message},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
} /// <summary>
/// 获取提示信息
/// </summary>
/// <param name="exception"></param>
/// <returns></returns>
private string GetMessage(Exception exception)
{
if (exception.IsTipException())
{
return GetTipMessage(exception);
} if (ConfigurationManager.AppSettings["HideErrorToUser"] == "true")
{
return "Web内部异常,请联系系统管理员。";
} return exception.GetFriendlyMessage();
}
/// <summary>
/// 处理出现提示类异常的请求
/// </summary>
/// <param name="filterContext"></param>
private void HandleRequestWithTipException(ExceptionContext filterContext)
{
var tipMessage = GetTipMessage(filterContext.Exception); filterContext.Result = new ViewResult()
{
ViewName = "Tip",
MasterName = string.Empty,
ViewData = new ViewDataDictionary<string>(tipMessage)
}; filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = ;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
} private string GetTipMessage(Exception exception)
{
if (exception is System.Web.HttpRequestValidationException)
{
return "请您输入合法字符。";
}
if (exception is TipInfoException)
{
return exception.Message;
}
return null;
}
}
/// <summary>
/// MVC动作结果类型
/// </summary>
public enum MVCResultType
{
/// <summary>
/// 没有指定
/// </summary>
NotSpecify = ,
/// <summary>
/// Html片段
/// </summary>
PartialHtml = ,
/// <summary>
/// 弹出框
/// </summary>
BootStrapModal =
}
}

统一的mvc异常处理的更多相关文章

  1. ASP.NET MVC异常处理

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

  2. NET MVC异常处理模块

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

  3. Spring MVC异常处理SimpleMappingExceptionResolver

    Spring MVC异常处理SimpleMappingExceptionResolver[转] (2012-12-07 13:45:33) 转载▼ 标签: 杂谈 分类: 技术分享 Spring3.0中 ...

  4. AOP Aspect 统一日志、异常处理、数据格式 【转】

    package com.gsww.chis.aop; import java.util.Arrays; import com.google.common.base.Throwables; import ...

  5. Spring MVC异常处理代码完整实例

    Spring MVC异常处理流程: 提供构造方法传值: 配置异常处理器的bean

  6. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  7. ASP.NET MVC中的统一化自定义异常处理

    当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置<customErrors/>节点 <customErrors>节点用于定义一些自定义错误信 ...

  8. 一个简单的ASP.NET MVC异常处理模块

    一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行.异常处理应该是一个横切点,所谓横切点就是各个部分都 ...

  9. Spring MVC异常处理详解

    Spring MVC中异常处理的类体系结构 下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要 ...

随机推荐

  1. 使用oracle11g_instant_client来解决在不安装oracle客户端的情况下连接服务端

    一.下载instantclient_11_2,可去oracle官网进行下载. 二.解压缩下载的instantclient_11_2,将instantclient_11_2目录拖放到C:\Program ...

  2. AngularJS进阶学习

    参考:http://***/class/54f3ba65e564e50cfccbad4b 1. AJAX:Asynchronous JavaScript and XML(异步的 JavaScript ...

  3. webpack练手项目之easySlide(一):初探webpack (转)

    最近在学习webpack,正好拿了之前做的一个小组件,图片轮播来做了下练手,让我们一起来初步感受下webpack的神奇魅力.     webpack是一个前端的打包管理工具,大家可以前往:http:/ ...

  4. The Result of an Interesting and Useful Program on Floating Numbers

    The program: class Program { static void Main() { const double infinity = double.PositiveInfinity; c ...

  5. 安装lua_zlib让OpenResy可以接收gzip请求

    1.下载和安装lua_zlib wget https://github.com/brimworks/lua-zlib/archive/master.zip unzip master.zip cd lu ...

  6. NOI OpenJudge 8469 特殊密码锁 Label贪心

    描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你 ...

  7. [知识点]Tarjan算法

    // 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html UPD ...

  8. golang gc 问题(转的)

    在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究.本文对研究的结果进行一下总结. 什么是垃圾回收? 曾几何时,内存管理是程序员开发应用的一大难 ...

  9. Linux多线程实例练习 - pthread_cancel()

    Linux多线程实例练习 - pthread_cancel 1.代码 xx_pthread_cancel.c #include <pthread.h> #include <stdio ...

  10. 选择Nodejs的N个理由

    选择Nodejs的N个理由 作者 马德奎 发布于 2014年9月25日 Caleb Madrigal是 来自美国密尔沃基市的一名软件顾问.四年前,他在听说“将JavaScript用作服务器端语言”这样 ...