1.简单例子

/// <summary>
/// 全局页面控制器异常记录 MVC的异常处理
/// </summary>
public class CustomErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext); //设置为true阻止golbal里面的错误执行
filterContext.ExceptionHandled = true;
filterContext.Result = new ViewResult() { ViewName = "/Views/Error.cshtml", ViewData = new ViewDataDictionary<string>("HandleErrorAttribute错误信息") }; }
} /// <summary>
/// 全局API异常记录 api的异常处理
/// </summary>
public class ApiHandleErrorAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext filterContext)
{
base.OnException(filterContext); filterContext.Response = new HttpResponseMessage() { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent("ExceptionFilterAttribute测试错误信息") };
}
}

2. Global中添加

```C#
//注册全局的自定义MVC异常过滤器
GlobalFilters.Filters.Add(new CustomErrorAttribute());
//注册api的异常
GlobalConfiguration.Configuration.Filters.Add(new ApiHandleErrorAttribute());

或者
在FilterConfig中添加

filters.Add(new CustomErrorAttribute());

在WebApiConfig中添加

config.Filters.Add(new ApiHandleErrorAttribute());

异常的处理

以上的异常处理,如果不需要作为特性使用直接实现IExceptionFilter接口即可,引用的时候注意命名空间的区别。

HandleErrorAttribute与ExceptionFilterAttribute的比较

1. HandleErrorAttribute在System.Web.Mvc下,主要用于Controller的异常处理,
ExceptionFilterAttribute在System.Web.Http.Filters下,主要用于api的异常处理

给定的筛选器实例必须实现以下一个或多个筛选器接口

出现这样的错误,主要是ExceptionFilterAttribute用错了,在配置中修改为

MVC与WebApi中的异常统一处理的更多相关文章

  1. MVC与WebApi中的异常过滤器

    一.MVC的异常过滤器   1.自定义MVC异常过滤器 创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可, 注意,该 ...

  2. 在MVC或WEBAPI中记录每个Action的执行时间和记录下层方法调用时间

    刚才在博客园看了篇文章,http://www.cnblogs.com/cmt/p/csharp_regex_timeout.html  突然联想到以前遇到的问题,w3wp进程吃光CPU都挂起IIS进程 ...

  3. 关于mvc、webapi中get、post、put、delete的参数

    webapi中post提交的数据必须是一个类,get提交的数量无所谓 多种参数get时,参数名不能相同: 在能通过c#的校验的前提下,参数名.参数数量不能全完相同 public string Get( ...

  4. spring MVC中的异常统一处理

    1.spring MVC中定义了一个标准的异常处理类SimpleMappingExceptionResolver 该类实现了接口HandlerExceptionResolver 2.看下SimpleM ...

  5. MVC和WebApi中设置Area中的页为首页

    拿WebApi为例,我们一般会生成一份帮助文档,帮助文档会在Area中 我们现在要讲帮助文档设为首页 只需在App_Start文件夹下添加 RouteConfig 类 public class Rou ...

  6. 【Java Web开发学习】Spring MVC异常统一处理

    [Java Web开发学习]Spring MVC异常统一处理 文采有限,若有错误,欢迎留言指正. 转载:https://www.cnblogs.com/yangchongxing/p/9271900. ...

  7. Autofac - MVC/WebApi中的应用

    Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...

  8. ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)

    什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ...

  9. WebAPI中无法获取Session对象的解决办法

    在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...

随机推荐

  1. Linux各种类型压缩包解压缩方法

    Linux上经常需要处理各种类型压缩包的解包和打包处理.通常来说会处理最常见的.tar包和.tar.gz包就能解决大部分问题了,但是真碰到其他类型的压缩包还是需要知道如何进行解压缩.这里对Linux上 ...

  2. tomcat 简单安装配置说明

    1.下载安装文件[apache-tomcat-6.0.41.tar.gz]到指定目录[/usr/local]2.解压文件[tar -zxvf apache-tomcat-6.0.41.tar.gz], ...

  3. Jetty-attack-test

    import httplib, urllib, ssl, string, sys, getopt from urlparse import urlparse ''' Author: Gotham Di ...

  4. DBCC维护语句语法

    一.DBCC维护语句:对数据库.索引或文件组进行维护的任务--1.DBCC CLEANTABLE,回收删除的可变长度列和文本列的空间 DBCC CLEANTABLE  ( { 'database_na ...

  5. 解决ngui挡住粒子的问题

    using UnityEngine; using System.Collections; [ExecuteInEditMode] public class ControlParticle : Mono ...

  6. 五, Authentication和Permissions

    概述 在介绍Django REST Framework(二):Request和Response 时提到,DRF提供了对身份验证和权限的处理机制,特点如下: 1.对API的不同部分使用不同的认证策略: ...

  7. python 引用和对象理解(转)

    引用和对象分离 从最开始的变量开始思考: 在python中,如果要使用一个变量,不需要提前进行声明,只需要在用的时候,给这个变量赋值即可 (这个和C语言等静态类型语言不同,和python为动态类型有关 ...

  8. matlab stereo_gui立体标定

    http://www.vision.caltech.edu/bouguetj/calib_doc/index.html#examples 文档中举了几个例子,有关双目的是第5个, 这个例子展示了如何使 ...

  9. cekephp 事务处理

    $sw = $this->Orders->getDataSource(); $sw->begin(); $this->Orders->commit() $this-> ...

  10. Java8中的[方法引用]“双冒号”——走进Java Lambda(四)

    前面的章节我们提及到过双冒号运算符,双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 注意是方法名哦,后面没有括号“()”哒.为啥不要括号,因为这样的是式子并不代表一定会调 ...