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.pswp.cn/news/257223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257223.shtml
英文地址,請注明出處:http://en.pswp.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{…