asp.net core web api之异常
生活随笔
收集整理的這篇文章主要介紹了
asp.net core web api之异常
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
官方建議用app.UseExceptionHandler("/error")來集中處理異常,本例是一個具體的應用。
比如項目中有一個ViewModel,要求Name最大長度為5
/// <summary>/// 用戶模型/// </summary>public class UserModel{/// <summary>/// ID/// </summary>public int ID { get; set; }/// <summary>///名稱///?</summary>??[MaxLength(5, ErrorMessage = "長度不能超過5")]public string Name { get; set; }}在TestController中有兩個Action,都有異常的機率,Get方法中,一個異常是系統內置的0被整除,另一個是我們自定義的業務層級異常(.NET架構小技巧(8)中有涉及);AddUser是有Model驗證有可能Name超過5個字符后報異常。Error方法一個錯誤處理Action,根據上下文的異常來分流系統內置異常,還是自定業務異常。
層級異常類
Error的Action之所有調用到,是因為Configure中添加如下代碼,把所有異常交給"/error"來處理。
添加DaMeiProblemDetailsFactory來兼容各類異常,自定義異常和Model驗證異常
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.ModelBinding; using System.Collections.Generic;namespace WebApiError {///?<summary>/// /// </summary>public class DaMeiProblemDetailsFactory : ProblemDetailsFactory{/// <summary>///?處理業務錯誤/// </summary>/// <param name="httpContext"></param>/// <param name="statusCode"></param>/// <param name="title"></param>/// <param name="type"></param>/// <param name="detail"></param>/// <param name="instance"></param>/// <returns></returns>public override ProblemDetails CreateProblemDetails(HttpContext httpContext, int? statusCode = null, string title = null, string type = null, string detail = null, string instance = null){var problem = new ProblemDetails(){Title = string.IsNullOrEmpty(type) ? title : $"業務異常錯誤:{title}",Detail = detail,Status = statusCode,Instance = instance,Type?=?type};return problem;}/// <summary>/// 處理model驗證錯誤/// </summary>/// <param name="httpContext"></param>/// <param name="modelStateDictionary"></param>/// <param name="statusCode"></param>/// <param name="title"></param>/// <param name="type"></param>/// <param name="detail"></param>/// <param name="instance"></param>/// <returns></returns>public override ValidationProblemDetails CreateValidationProblemDetails(HttpContext httpContext, ModelStateDictionary modelStateDictionary, int? statusCode = null, string title = null, string type = null, string detail = null, string instance = null){var problem = new ValidationProblemDetails(){Title = "Model驗證錯誤",Detail = detail,Status = statusCode,Instance = instance,Type = type};foreach (var a in modelStateDictionary){var errorList = new List<string>();foreach (var error in a.Value.Errors){errorList.Add(error.ErrorMessage);}problem.Errors.Add(new KeyValuePair<string, string[]>(a.Key, errorList.ToArray()));}return problem;}} }在ConfigureServices中需要注入DaMeiProblemDetailsFactory
其實還可以用Action過濾器來統一管理異常
另外一種方式是通過Action過濾器來處理
添加全局過濾器
services.AddControllers(options => {options.Filters.Add(new?DaMeiExceptionFilter()); });總結
以上是生活随笔為你收集整理的asp.net core web api之异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部署Dotnet Core应用到Kube
- 下一篇: .NET 5.0正式发布,有什么功能特性