统一的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中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要 ...
随机推荐
- BZOJ1946 : [Ceoi2006]ANTENNA
首先通过随机增量法求出最小覆盖圆,作为答案的上界. 然后二分答案,检验的时候枚举每个点作为原点,求出其他每个点被包括在圆内的角度区间,然后扫描线即可. 时间复杂度$O(Tn^2\log n)$. #i ...
- Java NIO之选择器Selector
在单独的线程中,检查多个通道是否可以进行IO操作. Selector创建:静态工厂方法创建 Selector selector = Selector.open(); 注册通道 channel.conf ...
- POJ2774 & 后缀数组模板题
题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...
- 编写高效的js/jQuery代码 :rocket:
讨论jQuery和javascript性能的文章并不罕见.然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码.好的代码会带来速度的提升.快速渲染 ...
- TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- 【bzoj2631】tree link-cut-tree
2016-06-01 08:50:36 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2631 注意加和乘的标记下传问题. 还有就是split后 ...
- HDU-1466 计算直线的交点数 经典dp
1.HDU-1466 计算直线的交点数 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1466 3.总结:不会推这个,看了题解.. 状态转移: m条 ...
- SVN文本文件报二进制属性的问题
2011-11-21 00:42 svn总出现二进制相关的烦人事 在使用svn add 时提示: A (bin) templates/translate/screen/selectTransLan ...
- 数据库之SQL语法
-- 创建数据库CREATE DATABASE mytest; -- 创建表CREATE TABLE t_user( -- primary key 定义该列为主键列 -- AUTO_INCREMENT ...
- Optimizely:在线网站A/B测试平台
Optimizely:在线网站A/B测试平台是一家提供 A/B 测试服务的公司.A/B 测试能够对比不同版本的设计,选取更吸引用户眼球的那一款,从而带来更为优化的个人体验.让网站所有者易于对不同版本的 ...