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. BZOJ4451 : [Cerc2015]Frightful Formula

    $(i,1)$对答案的贡献为$l_iC(2n-i-2,n-i)a^{n-1}b^{n-i}$. $(1,i)$对答案的贡献为$t_iC(2n-i-2,n-i)*a^{n-i}b^{n-1}$. $(i ...

  2. iOS中为网站添加图标到主屏幕

    1 <link rel="apple-touch-icon-precomposed" href="icon.png"/> 2 <link re ...

  3. 移动端开发——javascript

    javascript(简称js)语言在移动前端应用很广.可以说必不可少,许多效果都是和js相关的.包括现在移动端的一些框架.jqmobi.jqtouch.sencha touch.jquerymobi ...

  4. Ninject使用demo

    public class HomeController : Controller { public ActionResult Index() { //核心对象 IKernel ninjectKerne ...

  5. App所需申请资料

    准备资料 企业五证 营业执照 税务登记证 组织机构代码证 银行开户许可证 法人身份证 新邮箱 申请一个新的邮箱地址,供申请以下材料使用 苹果证书申请 AppleID 申请邓氏编码需要有AppleID ...

  6. flex lineChart 显示所有的数据节点

    .If you're using <mx:LineSeries>, then set the following property:itemRenderer="mx.charts ...

  7. CentOS上安装RabbitMQ3.6.X

    RabbitMQ3.6.1的安装方法跟以前的版本有点不一样,我在网上找了很多资料,基本都是3.1左右的版本,而且安装过程很繁琐,所以我花了一下午 的时间研究如何实现最简安装.为了让大家少走弯路,就把安 ...

  8. Log4cplus使用

    Log4cplus使用¶ 1.1 简介 log4cplus是C++编写的开源日志系统,前身是java编写的log4j日志系统.log4cplus具有线程安全.灵活.以及多粒度控制的特点,通过将信息划分 ...

  9. [LintCode] Sort Integers 整数排序

    Given an integer array, sort it in ascending order. Use selection sort, bubble sort, insertion sort ...

  10. oracle中复制表和数据 && 多表插入语句

    创建测试表和测试数据 create table test  (id number,name varchar(10));  insert into  test values(1,'liufang');  ...