统一的mvc异常处理
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异常处理的更多相关文章
- ASP.NET MVC异常处理
ASP.NET MVC异常处理方案 如何保留异常前填写表单的数据 ASP.NET MVC中的统一化自定义异常处理 MVC过滤器详解 MVC过滤器使用案例:统一处理异常顺道精简代码 ASP.NET MV ...
- NET MVC异常处理模块
一个简单的ASP.NET MVC异常处理模块 一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行. ...
- Spring MVC异常处理SimpleMappingExceptionResolver
Spring MVC异常处理SimpleMappingExceptionResolver[转] (2012-12-07 13:45:33) 转载▼ 标签: 杂谈 分类: 技术分享 Spring3.0中 ...
- AOP Aspect 统一日志、异常处理、数据格式 【转】
package com.gsww.chis.aop; import java.util.Arrays; import com.google.common.base.Throwables; import ...
- Spring MVC异常处理代码完整实例
Spring MVC异常处理流程: 提供构造方法传值: 配置异常处理器的bean
- Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理
本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...
- ASP.NET MVC中的统一化自定义异常处理
当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置<customErrors/>节点 <customErrors>节点用于定义一些自定义错误信 ...
- 一个简单的ASP.NET MVC异常处理模块
一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行.异常处理应该是一个横切点,所谓横切点就是各个部分都 ...
- Spring MVC异常处理详解
Spring MVC中异常处理的类体系结构 下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要 ...
随机推荐
- BZOJ1082: [SCOI2005]栅栏 题解
题目大意: 有一些木材,可以没有浪费地将一根木材分成几块木板(比如长度为10的木板可以切成长度为8和2的两块木板).现在你希望得到一些长度的木板,问通过分割木材最多能得到几块想要的木板. 思路: 首先 ...
- jquery自己手写表单验证
<script type="text/javascript" src="../jquery-1.8.3.js"></script> / ...
- [题解+总结]NOIP2015模拟题2
// 此博文为迁移而来,写于2015年7月22日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w72i.html 1.总 ...
- Android -- TabHost
TabHost 也就相当于Windows下的选项框 有两种实现方式 1. 继承TabActivity (已经废弃):从TabActivity中用getTabHost()方法获取TabHost 2. ...
- PHP zendframework phpunit 深入
安装包管理 curl -sS https://getcomposer.org/installer | /usr/local/php/bin/php 将证书安装到 ~$ mkdir ~/tools/ht ...
- 纪念逝去的岁月——C/C++快速排序
快速排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 如何在WORD2010中取消自动编号?
如何在WORD2010中取消自动编号? 使用WORD2010有一个很大的问题就是WORD2010的自动编号问题,WORD2010的自动编号是符合外国人的写作习惯的,对中国人来说不适用. WORD201 ...
- 初识WebSocket
众所周知,Http协议是无状态的,并且是基于Request/Response的方式与服务器进行交互,也就是我们常说的单工模式.但是随着互联 网的发展,浏览器与服务端进行双向通信需求的增加,长轮询向服务 ...
- 使用command对象操作数据库
1.Command对象查询数据库 protected void Button1_Click(object sender, EventArgs e) { //读取web.config节点配置 strin ...
- oracle免安装客户端设置
对oracle不是很熟悉,就是使用层面的,开发时往往需要连接oracle,又不想单独安装,一般都用个免安装的客户端罢了,再次记录一下自用 1.下载oracle免安装的客户端 下载地址:http://w ...