MVC与WebApi中的异常过滤器

一、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();
//处理异常
}

 

参考资料:
ASP.Net MVC过滤器
ASP.Net WebApi异常处理
HttpApplication.Error 事件

转载于:https://www.cnblogs.com/mstmdev/p/5471099.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下eclipse远程连接hadoop集群开发mapreduce

转载请注明出处&#xff0c;谢谢2017-10-22 17:14:09之前都是用python开发maprduce程序的&#xff0c;今天试了在windows下通过eclipse java开发&#xff0c;在开发前先搭建开发环境。在此&#xff0c;总结这个过程&#xff0c;希望能够帮助有需要的朋友。用Hadoop eclipse plu…

缩放浏览器时 背景图片固定

今天遇到一个很奇怪的问题&#xff0c;页面做好后&#xff0c;当缩放浏览器的时候&#xff0c;背景图片跟着移动&#xff0c;这就使本来做好的内容看起来像是错位了一样&#xff0c;跟背景对不上。 研究了一下发现&#xff0c;不需要fixed 之类的&#xff0c;只需要给body加个 …

医学影像后处理服务器系统的特点,【CT影像系统工作站怎么用】CT影像系统工作站好不好_使用技巧-ZOL软件百科...

为满足医疗卫生领域广大影像工作者、医生和医院管理工作者的需求&#xff0c;本单位应用当代计算机技术&#xff0c;影像处理技术以及网络技术开发的 CT型医学影像工作站&#xff0c;可与各种CT配接&#xff0c;不需对原机作任何改动。实现了数字化存储和接口标准化以及网络管理…

20145308刘昊阳 《Java程序设计》实验五报告

20145308刘昊阳 《Java程序设计》实验五 Java网络编程及安全 实验报告 实验名称 Java网络编程及安全 实验内容 1&#xff0e;掌握Socket程序的编写&#xff1b; 2&#xff0e;掌握密码技术的使用&#xff1b; 3&#xff0e;设计安全传输系统。 统计的PSP(Personal Software Pro…

FPL 2017最佳论文:如何对FPGA云发动DoS攻击?

第27届现场可编程逻辑与应用国际会议&#xff08;The International Conference on Field-Programmable Logic and Applications&#xff0c;FPL&#xff09;九月份在比利时根特召开。在FPL 2017上&#xff0c;一篇来自德国卡尔斯鲁厄理工学院&#xff08;Karlsruhe Institute …

应用程序唯一性

程序启动后&#xff0c;如果再次启动程序&#xff0c;不会出现2个程序&#xff0c;或者实现如Notepad已打开一个文件&#xff0c;再打开另外一个文件&#xff0c;则追加在Notepad界面上。 使用codeproject上别人编写的一个类&#xff0c;加在程序启动时即可。 sinstance.h /* M…

php的GC机制

在php5.3版本之前, php变量的回收机制只是简单的通过计数来处理(当refcount0时&#xff0c;会回收内存),但这样会出现一个问题 $aarray("str"); $a[]&$a; unset($a); 执行unset之前,$a的refcount 为2,执行unset之后,$a的refcout为1,因为是1不等于0,不能被回收内存…

Spring 框架的JDBC模板技术

1. 概述 Spring 框架提供了很多持久层的模板类来简化编程;Spring 框架提供的JDBC模板类: JdbcTemplate 类;Spring 框架提供的整合 Hibernate 框架的模板类: HibernateTemplate 类2. 环境搭建 2.1 创建数据库表结构 CREATE TABLE t_account(id INT PRIMARY KEY AUTO_INCREMENT,…

BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

数据 n < 30000 , 然后 O( n ) 的贪心也过了..... USACO 数据是有多弱啊 ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) --------------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include…

数据说话,88000条数据绘制北京市地图

偶获得一批数据&#xff0c;本着好玩的态度绘制下来看看到底是什么鬼&#xff0c;绘制的结果如下&#xff1a; 呵呵&#xff0c;什么都不像。而且中间最重要的部分因数据量过大绘制的已经看不清楚了。于是乎&#xff0c;缩小绘制范围&#xff0c;去除周围没有用的数据。重新绘制…

我的第一个python web开发框架(11)——工具函数包说明(二)

db_helper.py是数据库操作包&#xff0c;主要有两个函数&#xff0c;分别是read()数据库读操作函数和write()数据库写操作函数。这个包的代码是从小戴同学分享的博文改造过来的。 1 #!/usr/bin/env python2 # codingutf-83 4 import psycopg25 from common import log_helper6 …

ASP.NET:在一般处理程序中通过 Session 保存验证码却无法显示图片?

1 using System.Drawing;2 using System.Web;3 using System.Web.SessionState;4 5 /// <summary>6 /// CaptchaHandler 的摘要说明7 /// </summary>8 public class CaptchaHandler : IHttpHandler, IRequiresSessionState  //简记&#xff1a;我需要Session9 { …

[LINK]用Python计算昨天、今天和明天的日期时间

用Python计算昨天、今天和明天的日期时间 转载于:https://www.cnblogs.com/Athrun/p/5477651.html

Windows系统下oracle数据库每天定时备份

第一步&#xff1a;建立备份脚本oraclebackup.bat 首先建立一个备份bat文件&#xff0c;在D盘下新建备份目录oraclebackup&#xff0c;将oracle安装目录下的EXP.EXE复制到此目录下&#xff0c;再新建一个文本文件oraclebackup.txt&#xff0c;内容如下&#xff1a; echo off ec…

面试题3:二维数组查找

1 bool Find(const int *matrix, int rows, int columns, int number)2 {3 int key;4 int indexRow;5 int indexCol;6 7 /*合法性检查*/8 if((NULL matrix)||(rows < 0)||(columns <0))9 { 10 return false; 11 } 12 13 /*提升…

linux crontab 命令

#method 1 crontab -e crontab -u root -e #不同用户自己的任务计划 crontab -l#method 2 vim /etc/crontab# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .--…

[译] RNN 循环神经网络系列 2:文本分类

原文地址&#xff1a;RECURRENT NEURAL NETWORKS (RNN) – PART 2: TEXT CLASSIFICATION原文作者&#xff1a;GokuMohandas译文出自&#xff1a;掘金翻译计划本文永久链接&#xff1a;github.com/xitu/gold-m…译者&#xff1a;Changkun Ou校对者&#xff1a;yanqiangmiffy, To…

[置顶] Android开发者官方网站文档 - 国内踏得网镜像

Mark 一下&#xff1a; 镜像地址&#xff1a;http://wear.techbrood.com/index.html Android DevelopTools: http://www.androiddevtools.cn/ 转载于:https://www.cnblogs.com/superle/p/4561856.html

Java实现选择排序

选择排序思想就是选出最小或最大的数与第一个数交换&#xff0c;然后在剩下的数列中重复完成该动作。 package Sort;import java.util.Arrays;public class SelectionSort {public static int selectMinKey(int[] list, int beginIdx) {int idx beginIdx;int temp list[begin…

ASP.NET MVC中ViewData、ViewBag和TempData

1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任意类型。 1.2 ViewData它只会存在这次的HTTP要求而已,而不像Session可以将数据带到下HTTP要求。 public class TestController : Controller{…