一、MVC的异常过滤器

 
1、自定义MVC异常过滤器
创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可,
注意,该接口在System.Web.Mvc 命名空间下
 
  1. /// <summary>
    /// 自定义的MVC异常过滤器
    /// 可以在Controller或Action上单独使用,也可直接注册为全局过滤器
    /// </summary>
    publicclassMVCExceptionFilterAttribution:HandleErrorAttribute
    {
    publicoverridevoidOnException(ExceptionContext filterContext)
    {
    base.OnException(filterContext);
    //标示当前异常已经被处理
    //如果不手动设置为false,则异常会被Application_Error事件捕获,并可能显示到客户端
    filterContext.ExceptionHandled=true;
    filterContext.Result=newContentResult(){Content="MVC Error"};
    }
    }
 
2、注册MVC全局过滤器
    直接在Global文件中的Application_Start事件中进行注册    
  1. protectedvoidApplication_Start()
    {
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    //注册全局的自定义MVC异常过滤器
    GlobalFilters.Filters.Add(newMVCExceptionFilterAttribution());
    }
 
 
3、注册Asp.Net异常处理
    除了可以注册MVC的异常处理过滤器外,还可以直接在Global文件中的Application_Error事件中处理Asp.Net中的异常
  1. /// <summary>
    /// 处理Asp.Net中的异常
    /// Controller中未处理的异常会被这里捕获
    /// </summary>
    publicvoidApplication_Error(object sender,EventArgs e)
    {
    var exception =Server.GetLastError();
    //处理异常
    }
 
MVC中的异常首先会被过滤器捕获,如果异常在过滤中标识为已处理,则不会被Application_Error事件再次捕获,否则Application_Error事件中的代码会被触发。
 
 
 
 
二、WebApi中异常过滤器
 
1、自定义WebApi异常过滤器
 
    创建一个类,继承自ExceptionFilterAttribute即可,如果不需要以特性的方式进行使用,则只需要实现IExceptionFilter接口即可,
注意,该接口在System.Web.Http.Filters命名空间下

 
/// <summary>
/// WebApi异常过滤器
/// 可以在Controller或Action上单独使用,也可直接注册为全局过滤器
/// </summary>
publicclassWebApiExceptionFilterAttribution:ExceptionFilterAttribute
{
publicoverridevoidOnException(HttpActionExecutedContext actionExecutedContext)
{
base.OnException(actionExecutedContext);
actionExecutedContext.Response=newSystem.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK){ReasonPhrase="api error"};
}
}
 
2、注册全局WebApi过滤器
    同样在Global文件中的Application_Start事件中进行过滤器的注册,
注意,与MVC不同,此处是在GlobalConfiguration上进行注册

protectedvoidApplication_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
//注册MVC中的过滤器 详见MVCExceptionFilter项目示例
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//注册一个自定义的全局WebApi异常过滤器
GlobalConfiguration.Configuration.Filters.Add(newWebApiExceptionFilterAttribution());
}
 
 
3、注册Asp.Net异常处理
    在WebApi的项目中同样可以注册Asp.Net的异常处理事件,但是此处并不会捕获WebApi中APIController中抛出的异常,只会捕获MVC中
Controller抛出的异常
/// <summary>
/// 处理Asp.Net中的异常
/// Controller中未处理的异常会被这里捕获
/// 但ApiController中的异常不会被捕获
/// </summary>
publicvoidApplication_Error(object sender,EventArgs e)
{
var exception =Server.GetLastError();
//处理异常
}
 
参考资料:
 

MVC与WebApi中的异常过滤器的更多相关文章

  1. MVC与WebApi中的异常统一处理

    1.简单例子 /// <summary> /// 全局页面控制器异常记录 MVC的异常处理 /// </summary> public class CustomErrorAtt ...

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

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

  3. MVC默认提供了一个异常过滤器 HandleErrorAttribte特性

    这一篇记录MVC默认提供了一个异常过滤器 HandleErrorAttribte,下一篇介绍自定义异常过滤特性. 参考引用:https://www.cnblogs.com/TomXu/archive/ ...

  4. asp.net core MVC 全局过滤器之ExceptionFilter异常过滤器(一)

    本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter异常过滤器(一) asp.net cor ...

  5. WebApi自定义全局异常过滤器及返回数据格式化

    WebApi在这里就不多说了,一种轻量级的服务,应用非常广泛.我这这里主要记录下有关 WebApi的相关知识,以便日后使用. 当WebApi应用程序出现异常时,我们都会使用到异常过滤器进行日志记录,并 ...

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

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

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

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

  8. 笨鸟先飞之ASP.NET MVC系列之过滤器(06异常过滤器)

    概念介绍 异常过滤器主要在我们方法中出现异常的时候触发,一般我们用 异常过滤器 记录日志,或者在产生异常时做友好的处理 如果我们需要创建异常过滤器需要实现IExceptionFilter接口. nam ...

  9. Autofac - MVC/WebApi中的应用

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

随机推荐

  1. linux下的grep命令

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  2. SQL脚本添加删除修改字段

    1.增加字段     alter table docdsp     add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME DROP COLUMNc ...

  3. 写Markdown费事?Typora让你像写word一样行云流水,所见即所得。

    Typora 简介 Typora删除了预览窗口,以及所有其他不必要的干扰.取而代之的是实时预览. Markdown的语法因不同的解析器或编辑器而异,Typora使用的是GitHub Flavored ...

  4. 再说优化MySQL索引

    这几天开发尤其重视数据库索引的优化,是一件好事情,开发特意提过来几个要删除的索引,oh!我的佛陀呀!历史上出现过因为评估不到位,删索引引发故障的案例.那么有什么办法可以评估索引是否合理呢? perco ...

  5. 第4章 scrapy爬取知名技术文章网站(1)

    4-1 scrapy安装以及目录结构介绍 安装scrapy可以看我另外一篇博文:Scrapy的安装--------Windows.linux.mac等操作平台,现在是在虚拟环境中安装可能有不同. 1. ...

  6. mysql:名次排名 (并列与不并列)

    http://www.cnblogs.com/zengguowang/p/5541431.html sql语句查询排名 思路:有点类似循环里面的自增一样,设置一个变量并赋予初始值,循环一次自增加1,从 ...

  7. C#Json数据类型

    引用所对应框架的类库文件,下载地址:http://json.codeplex.com/ 在一般处理程序axhx中: 引用的命名空间: using System.IO;using Newtonsoft. ...

  8. php index.php修改之后未生效

    php index.php修改之后未生效 PHP项目修改了index.php 里面的代码,提交服务器之后,代码功能未生效, 解决办法:重启fpm 命令如下: /etc/init.d/php5-fpm ...

  9. zoj 3747 (DP)(连续至多,连续至少)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5170 参考: http://blog.csdn.net/cc_again/ar ...

  10. sql 模糊搜素拼接

    if($irb_order!=''){ $condition .= " AND d.irb_order like '%".$irb_order."%'"; } ...