我為我的 API 撰寫了一個例外過濾器來處理 API 中拋出的例外:
using System;
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class ApiExceptionFilter : ExceptionFilterAttribute {
public override void OnException(ExceptionContext context) {
// First, generate the status code based on the exception type
HttpStatusCode status = context.Exception switch {
UnauthorizedAccessException => HttpStatusCode.Unauthorized,
ArgumentException => HttpStatusCode.BadRequest,
MissingHeaderException => HttpStatusCode.BadRequest,
NotFoundException => HttpStatusCode.NotFound,
_ => HttpStatusCode.InternalServerError,
};
// Next, inject the status code and exception message into
// a new error response and set the result with it
context.Result = new JsonResult(new ErrorResponse {
StatusCode = status,
Message = context.Exception.Message
});
// Finally, call the base function
base.OnException(context);
}
}
此函式按預期攔截例外,但我遇到的問題是它總是回傳一個 OK 回應。如何確保回應包含例外訊息并且回應代碼是非 200 值?
uj5u.com熱心網友回復:
而不是回傳一個JsonResult- 它不公開要設定的狀態代碼屬性 - 回傳一個ExceptionResult并設定狀態代碼,如下所示:
context.Result = new ExceptionResult(context.Exception, true)
{ StatusCode = status };
如果您仍想使用您的 ErrorResponse 物件,只需使用物件結果:
context.Result = new ObjectResult(new ErrorResponse {
StatusCode = status,
Message = context.Exception.Message
})
// set status code on result
{ StatusCode = status };
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426265.html
標籤:C# asp.net-mvc 例外
上一篇:無法通過此例外
