精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何友好的處理 WebApi 中拋出的錯誤

開發 架構
微軟的 ASP.NET Web API 是一個輕量級的web框架,可用來構建基于 http 無狀態的rest服務,異常是一種運行時錯誤,異常處理是一種處理運行時錯誤的技術,每一個開發者都應該知道如何處理 Web API 中的異常,并且在 Action 中使用合適的 錯誤碼 和 錯誤信息 進行包裝。

[[384418]]

本文轉載自微信公眾號「碼農讀書」,作者碼農讀書。轉載本文請聯系碼農讀書公眾號。

微軟的 ASP.NET Web API 是一個輕量級的web框架,可用來構建基于 http 無狀態的rest服務,異常是一種運行時錯誤,異常處理是一種處理運行時錯誤的技術,每一個開發者都應該知道如何處理 Web API 中的異常,并且在 Action 中使用合適的 錯誤碼 和 錯誤信息 進行包裝。

WebAPI 中的 HttpResponseException

你可以在 Action 中使用 HttpResponseException 來包裝指定的 HttpCode 和 HttpMessage,如下例子所示:

  1. public Employee GetEmployee(int id) 
  2.     Employee emp = employeeRepository.Get(id); 
  3.     if (emp == null
  4.     { 
  5.         var response = new HttpResponseMessage(HttpStatusCode.NotFound) 
  6.         { 
  7.             Content = new StringContent("Employee doesn't exist", System.Text.Encoding.UTF8, "text/plain"), 
  8.             StatusCode = HttpStatusCode.NotFound 
  9.         } 
  10.         throw new HttpResponseException(response); 
  11.     } 
  12.     return emp; 

如果你的 Action 返回的是 IHttpActionResult,那么可將 GetEmployee() 方法修改如下:

  1. public IHttpActionResult GetEmployee(int id) 
  2.     Employee emp = employeeRepository.Get(id); 
  3.     if (emp == null
  4.     { 
  5.         var response = new HttpResponseMessage(HttpStatusCode.NotFound) 
  6.         { 
  7.             Content = new StringContent("Employee doesn't exist", System.Text.Encoding.UTF8, "text/plain"), 
  8.             StatusCode = HttpStatusCode.NotFound 
  9.         } 
  10.         throw new HttpResponseException(response); 
  11.     } 
  12.     return Ok(emp); 

從上面的代碼可以看出,錯誤碼 和 錯誤消息 都賦給了 Response 對象,然后包裝到了 HttpResponseException 進行返回。

WebAPI 中使用 HttpError

除了直接實例化 HttpResponseMessage 類,還可以使用 Request.CreateErrorResponse() 快捷的創建 HttpResponseMessage 類,如下代碼所示:

  1. public IActionResult GetEmployee(int id) 
  2.     Employee emp = employeeRepository.Get(id); 
  3.     if (emp == null
  4.     { 
  5.        string message = "Employee doesn't exist"
  6.         throw new HttpResponseException( 
  7.             Request.CreateErrorResponse(HttpStatusCode.NotFound, message)); 
  8.     } 
  9.     return Ok(emp); 

WebAPI 中使用 異常過濾器

異常過濾器是一種可以在 WebAPI 中捕獲那些未得到處理的異常的過濾器,要想創建異常過濾器,你需要實現 IExceptionFilter 接口,不過這種方式比較麻煩,更快捷的方法是直接繼承 ExceptionFilterAttribute 并重寫里面的 OnException() 方法即可,這是因為 ExceptionFilterAttribute 類本身就實現了 IExceptionFilter 接口,如下代碼所示:

  1. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
  2.    public abstract class ExceptionFilterAttribute : FilterAttribute, IExceptionFilter, IFilter 
  3.    { 
  4.  
  5.        protected ExceptionFilterAttribute(); 
  6.  
  7.        public virtual void OnException(HttpActionExecutedContext actionExecutedContext); 
  8.        public virtual Task OnExceptionAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken); 
  9.    } 

下面的代碼片段展示了如何通過重寫 ExceptionFilterAttribute.OnException() 方法來創建一個自定義異常過濾器,請注意下面的代碼是如何捕獲在 Action 中拋出的異常,并將捕獲到的異常轉換為 HttpStatusResponse 實體,然后塞入合適的 httpcode 和 httpmessage,如下代碼所示:

  1. public class CustomExceptionFilter : ExceptionFilterAttribute 
  2.  { 
  3.      public override void OnException(HttpActionExecutedContext actionExecutedContext) 
  4.      { 
  5.          HttpStatusCode status = HttpStatusCode.InternalServerError; 
  6.          String message = String.Empty; 
  7.          var exceptionType = actionExecutedContext.Exception.GetType(); 
  8.          if (exceptionType == typeof(UnauthorizedAccessException)) 
  9.          { 
  10.              message = "Access to the Web API is not authorized."
  11.              status = HttpStatusCode.Unauthorized; 
  12.          } 
  13.          else if (exceptionType == typeof(DivideByZeroException)) 
  14.          { 
  15.              message = "Internal Server Error."
  16.              status = HttpStatusCode.InternalServerError; 
  17.          } 
  18.          else 
  19.          { 
  20.              message = "Not found."
  21.              status = HttpStatusCode.NotFound; 
  22.          } 
  23.          actionExecutedContext.Response = new HttpResponseMessage() 
  24.          { 
  25.              Content = new StringContent(message, System.Text.Encoding.UTF8, "text/plain"), 
  26.              StatusCode = status 
  27.          }; 
  28.          base.OnException(actionExecutedContext); 
  29.      } 
  30.  } 

接下來將自定義的異常過濾器添加到 HttpConfiguration 全局集合中,如下代碼所示:

  1. public static void Register(HttpConfiguration config) 
  2.         { 
  3.             config.MapHttpAttributeRoutes(); 
  4.             config.Routes.MapHttpRoute( 
  5.                 name"DefaultApi"
  6.                 routeTemplate: "api/{controller}/{id}"
  7.                 defaults: new { id = RouteParameter.Optional } 
  8.             ); 
  9.             config.Formatters.Remove(config.Formatters.XmlFormatter); 
  10.             config.Filters.Add(new CustomExceptionFilter()); 
  11.         } 

除了將自定義異常設置到全局上,你還可以縮小粒度到 Controller 或者 Action 級別上,下面的代碼分別展示了如何將其控制在 Action 和 Controller 上。

  1. [DatabaseExceptionFilter] 
  2. public class EmployeesController : ApiController 
  3.     //Some code 
  4.  
  5.  [CustomExceptionFilter] 
  6.  public IEnumerable<string> Get() 
  7.  { 
  8.     throw new DivideByZeroException();  
  9.  } 

ASP.NET Web API 提供了強大的 HttpResponseException 來包裝異常信息,默認情況下,當 WebAPI 中拋出異常,系統默認使用 Http StateCode = 500 作為回應,也即:Internal Server Error. ,場景就來了,如果你會用 HttpResponseException 的話,就可以改變這種系統默認行為,自定義錯誤碼和錯誤信息讓結果更加清晰語義化。

譯文鏈接:https://www.infoworld.com/article/2994111/how-to-handle-errors-in-aspnet-web-api.html

 

責任編輯:武曉燕 來源: 碼農讀書
相關推薦

2009-03-18 08:59:28

throw異常Java

2021-01-14 21:37:01

JavaScript開發代碼

2014-06-27 09:34:03

AngularJS

2023-11-30 07:15:36

GolangRecover

2023-12-26 22:05:53

并發代碼goroutines

2021-09-01 07:21:46

堆棧Gopanic

2025-02-10 09:49:00

2018-03-05 19:20:49

LinuxWordPressHTTP

2016-09-07 20:28:17

MySQL存儲數據庫

2024-04-16 12:18:05

編程異常處理錯誤返回

2021-01-28 13:16:27

Python編程語言

2017-05-26 11:32:44

程序應用測試

2023-04-17 07:41:02

Rust網絡數據

2024-09-23 08:10:00

.NET開發

2023-10-26 12:05:14

Golang開發

2018-08-30 10:28:05

修復Windows 10IntcOED

2021-04-14 07:08:14

Nodejs錯誤處理

2011-05-11 14:50:54

URL

2024-03-05 18:15:28

AsyncAwait前端

2022-02-15 08:38:04

錯誤邏輯異常編程程序
點贊
收藏

51CTO技術棧公眾號

欧美精品九九久久| 日韩一区二区三区在线| 蜜桃视频在线观看成人| 成人免费一区二区三区| 亚洲色图网站| 亚洲精品大尺度| 国产天堂在线播放| 二区三区四区高清视频在线观看| 成人激情免费网站| 日韩免费视频在线观看| 黑鬼狂亚洲人videos| 欧美人与动xxxxz0oz| 在线这里只有精品| 狠狠精品干练久久久无码中文字幕| 午夜在线视频观看| 国产一区二区免费在线| 欧美中文在线观看| 老熟妻内射精品一区| 欧美精品国产白浆久久久久| 欧美午夜精品久久久久久孕妇 | 久久久久国产一区二区三区| 亚洲久久久久久久| 97人人澡人人爽91综合色| 色88888久久久久久影院野外| 久久久成人精品一区二区三区| 天天综合网在线观看| 黑人巨大精品欧美黑白配亚洲| 欧美野外猛男的大粗鳮| 美女的奶胸大爽爽大片| 成人动漫免费在线观看| 亚洲激情 国产| 在线观看网站黄| 精品无人乱码一区二区三区| 亚洲成av人片在线| 精品嫩模一区二区三区| 成人在线播放视频| 99riav一区二区三区| www.成人av| 国产又爽又黄又嫩又猛又粗| 日韩精品一卡二卡三卡四卡无卡| 国内外成人免费激情在线视频网站| 啪啪一区二区三区| 国内精品久久久久久久影视简单| 亚洲精品国产精品国产自| 国产老头和老头xxxx×| 色综合视频一区二区三区日韩| 一本到三区不卡视频| 国产69精品久久久久999小说| 91高清在线观看视频| 最新日韩在线视频| 一区二区三区精品国产| 最新真实国产在线视频| 国产女主播一区| 久久精品国产一区二区三区不卡| 好吊视频一二三区| 成人性视频免费网站| 91文字幕巨乱亚洲香蕉| 国产高中女学生第一次| 狠狠色丁香婷综合久久| 国产精品一区二区三区成人| 最近中文字幕在线观看| 日韩av一区二区三区| 日本免费一区二区三区视频观看| 女人十八岁毛片| 国产精品五区| 日本成人在线视频网址| 成人a v视频| 日本成人超碰在线观看| 国产精品主播视频| 91美女精品网站| 国产中文字幕一区| 亚洲在线观看视频| 粉嫩小泬无遮挡久久久久久| 成人污视频在线观看| 精品国产乱码久久久久软件| 日本不卡免费播放| 中文字幕第一区| 欧美 日韩 国产 在线观看| 成人片在线看| 精品福利在线看| 无码人妻丰满熟妇区五十路百度| 成人日韩精品| 91.成人天堂一区| 老女人性生活视频| 美女视频亚洲色图| 亚洲最大在线视频| 视频国产一区二区| 韩日欧美一区| 国产成人精品日本亚洲专区61| 成人免费一区二区三区| 国产精品99久久久久久久vr| 精品国产一区二区三区四区vr | 99久久伊人网影院| 日韩一区不卡| 性xxxxfjsxxxxx欧美| 欧美日韩视频在线| 在线视频一二区| 欧美自拍一区| 精品国产一区二区三区久久久狼| 日本中文字幕免费观看| 日韩精品一级中文字幕精品视频免费观看 | 免费在线观看av网站| 亚洲国产成人91porn| 黄色片在线免费| 香蕉大人久久国产成人av| 亚洲精品国产精品国自产在线 | 男人操女人逼免费视频| 日本黄色一区| 亚洲国产精品久久久| 超碰人人人人人人人| 红桃视频国产精品| 国产精品美乳一区二区免费| 亚洲产国偷v产偷v自拍涩爱| 国产欧美精品区一区二区三区 | 一区在线视频观看| 国产精品免费视频久久久| 丰满人妻一区二区三区免费视频| 国产日产欧美一区二区视频| 日本一本中文字幕| 四虎国产精品成人免费影视| 亚洲精品成人久久| 天天看片中文字幕| 美女视频免费一区| 欧美大陆一区二区| 678在线观看视频| 欧美一区二区三区婷婷月色| 中文字幕有码在线播放| 一区二区日本视频| 高清av免费一区中文字幕| 免费理论片在线观看播放老| 亚洲午夜久久久久中文字幕久| 91小视频在线播放| 秋霞欧美视频| 国产成人综合精品在线| 三级国产在线观看| 五月天中文字幕一区二区| 精品国产午夜福利在线观看| 日本不卡免费一区| 国产激情视频一区| 国产在线高清| 色综合久久88色综合天天6| 日本少妇xxxx| 黄色成人在线网址| 99c视频在线| 日本高清在线观看| 日韩三区在线观看| 69av.com| 国产成人av影院| 亚洲成在人线在线播放| 国产精品嫩草在线观看| 成人免费高清| 日韩一区二区在线看| 日本老熟俱乐部h0930| 国产一区二区三区av电影| 一区二区日本伦理| 91精品网站在线观看| 精品国产一区二区三区四区在线观看| 中文字幕一区二区三区免费看| 久久精品亚洲精品国产欧美kt∨ | www亚洲色图| 青草av.久久免费一区| 亚洲黄色成人久久久| 欧美aaa级| 久久国产精品久久久久久| 国产视频aaa| 亚洲一区二区在线观看视频| 星空大象在线观看免费播放| 亚洲精品孕妇| 久久精品女人的天堂av| 国产 日韩 欧美一区| 日韩视频免费看| 亚洲精品一区二区三区不卡| 欧美日韩国产中文精品字幕自在自线| 丰满圆润老女人hd| 免费观看久久久4p| 国产激情在线看| 黄色欧美在线| 国产精品久久久久久久久久久不卡| 爱久久·www| 日韩一二在线观看| 日本一二三区视频| 国产欧美一区二区在线| 亚洲综合伊人久久| 91久久亚洲| 日韩偷拍一区二区| 国产精品亚洲四区在线观看| 国产69精品久久久久99| 黄色片免费在线| 欧美二区在线观看| 国产精品第9页| 亚洲国产高清在线| 国产性猛交96| 免费人成黄页网站在线一区二区| 欧美精品videossex性护士| 国产手机免费视频| 色成人综合网| 91禁外国网站| 日本在线www| 亚洲第一福利视频| 亚洲 小说区 图片区| 亚洲男人天堂av网| 日本乱子伦xxxx| 国产传媒一区在线| 丰满少妇在线观看| 激情自拍一区| 亚洲最大色综合成人av| 大奶在线精品| 91精品在线影院| 国产精品迅雷| 久久久久久久激情视频| 日本三级视频在线播放| 日韩精品在线视频| www.av日韩| 欧美亚州韩日在线看免费版国语版| 538精品在线视频| 国产超碰在线一区| 在线观看高清免费视频| 好吊一区二区三区| 国产日本欧美在线| 激情婷婷综合| 久久天天狠狠| 国产精品香蕉| 91在线免费网站| 国产日本久久| 国产成人涩涩涩视频在线观看| а√天堂中文在线资源8| 伦理中文字幕亚洲| 日本天堂在线观看| 一区二区三区天堂av | 亚洲黄色av网站| av高清一区二区| 9l视频自拍九色9l视频成人| 日韩精品视频在线观看免费| xxxx国产精品| 欧美精品三级日韩久久| 中文在线字幕av| 在线国产亚洲欧美| 婷婷激情五月网| 黄色精品在线看| 精品一区二区三区四| 亚洲激情中文1区| 国产人与禽zoz0性伦| 国产精品家庭影院| 黄色国产在线播放| 国产日韩欧美精品在线| 白白色免费视频| 久久亚洲一区二区三区四区| 欧美bbbbb性bbbbb视频| 不卡的av电影| 国产在线观看无码免费视频| 99精品久久只有精品| 人妻在线日韩免费视频| av不卡在线观看| 在线免费观看a级片| 91免费观看视频| 午夜理伦三级做爰电影| 久久久精品一品道一区| 国产免费看av| 欧美激情一区二区| 91香蕉视频污在线观看| 亚洲人吸女人奶水| 国产精品白嫩白嫩大学美女| 亚洲精品福利视频网站| 精品无码一区二区三区电影桃花 | 国产又粗又猛又爽又黄的视频四季 | 亚洲精品小说| 中文字幕在线乱| 激情成人综合| 免费在线观看亚洲视频| 久久久久久久欧美精品| 中文字幕国内自拍| 国产一区福利在线| 国产艳妇疯狂做爰视频 | 粉嫩精品一区二区三区在线观看| youjizzjizz亚洲| 精品一区二区日本| 国产成人精品999在线观看| 亚洲国产精品123| 88国产精品视频一区二区三区| 免费的av在线| 亚洲美女少妇无套啪啪呻吟| 久章草在线视频| 久久国产精品一区二区| 久久无码人妻一区二区三区| caoporn国产精品| 日本猛少妇色xxxxx免费网站| 中文字幕一区二区三区精华液 | 久久电影中文字幕| 日韩亚洲欧美中文在线| 91超碰在线免费| 国产精品日韩在线播放| 日韩成人在线看| 秋霞毛片久久久久久久久| 亚洲人metart人体| 69堂免费视频| 国产精品一二三区| 亚洲最大成人网站| 亚洲情趣在线观看| 日本韩国欧美中文字幕| 91精品国产综合久久久蜜臀图片| 日韩在线视频观看免费| 色777狠狠综合秋免鲁丝| 国产桃色电影在线播放| 亚洲麻豆一区| 欧美中文娱乐网| 欧美黄色aaaa| 毛葺葺老太做受视频| 豆国产96在线|亚洲| 免费看黄色av| 亚洲一区二区三区三| 中文在线字幕av| 精品一区二区三区四区| 污污片在线免费视频| 国产精品国产亚洲伊人久久| 国产精东传媒成人av电影| 亚洲欧美在线网| 亚洲永久视频| 欧美日韩一区二区三区四区五区六区| 国产精品久久影院| 国产精品第5页| 欧美一区二区大片| 尤物在线视频| 国产成人久久久精品一区| 第一区第二区在线| 中文字幕人成一区| 日本午夜精品视频在线观看| 亚洲国产精品成人综合久久久| 亚洲精品国产一区二区三区四区在线| 成人一级免费视频| 日韩精品高清在线观看| 高清毛片在线观看| 成人国产1314www色视频| 911精品美国片911久久久| 中文字幕 91| 国产偷国产偷亚洲高清人白洁| www.国产高清| 欧美精品一区二区久久婷婷| 18加网站在线| 亚洲va电影大全| 91日韩在线| 日韩av一卡二卡三卡| 国产亚洲1区2区3区| 欧美成人精品欧美一级乱黄| 日韩一区二区三| 中文字幕有码在线观看| 亚洲综合国产精品| 欧美特黄一区| 亚洲熟妇一区二区| 亚洲精品日日夜夜| 国产富婆一级全黄大片| 欧美成人精品在线播放| 日韩精品一区国产| 国产情侣第一页| 成人精品免费视频| 日韩 欧美 精品| 日韩国产激情在线| 三上悠亚激情av一区二区三区| 欧美一区二区三区精美影视| 视频一区二区三区入口| 中国女人特级毛片| 欧美日韩精品一区二区在线播放| 在线观看免费版| 国产综合福利在线| 午夜国产一区| 无码人妻精品一区二区三区99不卡| 你懂得影院夜精品a| 久久久久久电影| 手机av在线网| 亚洲你懂的在线视频| www.97超碰| 91精品国产高清久久久久久| 免费欧美一区| 怡红院亚洲色图| 亚洲精品视频在线看| 亚洲免费成人在线| 国产91|九色| 成人久久久久| 国产一级片中文字幕| 亚洲成人免费影院| 欧美理论在线观看| 国产又爽又黄的激情精品视频 | eeuss影院一区二区三区| 最近免费中文字幕大全免费版视频| 中文字幕国产精品久久| 九九99久久精品在免费线bt| 国产二级片在线观看| 国产区在线观看成人精品| 国产欧美综合视频| 欧美中文在线视频| 99久久夜色精品国产亚洲96| 色悠悠在线视频| 欧美性一区二区| av中文字幕在线观看| 麻豆成人小视频| 国内精品久久久久影院色| 日韩精品在线免费看| 中文字幕在线观看亚洲| 激情小说亚洲色图| 一级做a免费视频| 日韩欧美在线网址|