我能夠通過我的自定義例外類獲得錯誤資訊,但它似乎總是回傳 500 狀態代碼。
我怎樣才能使用我的自定義例外類來設定狀態代碼呢?
這是應用流程:
服務:
throw new UCodeException("Already exist"/span>, StatusCodes.Status409Conflict) 。
UCodeException:
public class UCodeException : UException >。
{
public override int StatusCode { get; }
public UCodeException(string error。int statusCode)。base(error)。
{
StatusCode = statusCode。
}
public UCodeException(string[] errors。int statusCode)。base(errors)。
{
StatusCode = statusCode。
}
}
UException:
public abstract class Exception : Exception : Exception
{
public string[] Errors { get; }
public abstract int StatusCode { get; }
protected Exception(>string error) : base(error)。
{
Errors = new []{error};
}
protected Exception(string[] errors)。
{
Errors = 錯誤。
}
}
uj5u.com熱心網友回復:
你可以用過濾器
實作它。- 創建一個動作,并將其作為一個動作。
- 創建一個名為
HttpResponseExceptionFilter的動作過濾器。public class HttpResponseExceptionFilter : IActionFilter, IOrderedFilterpublic void OnActionExecuting(ActionExecutingContext context) /span> { } public void OnActionExecuted(ActionExecutedContext context) { if (context.Exception is UCodeException exception) { context.Result = new ObjectResult(exception.Errors) { StatusCode = exception.StatusCode。 }; context.ExceptionHandled = true; } } } - 在
Startup.ConfigureServices中,將動作過濾器添加到過濾器集合中。services.AddControllers(options => options.Filters.Add(new HttpResponseExceptionFilter())。
或者撰寫自定義的例外中間件。創建名為ExceptionMiddleare的類:
public class ExceptionMiddleware
{
private readonly RequestDelegate _next;
public ExceptionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
if (ex is HttpResponseException exception)
{
context.Response.StatusCode = exception.StatusCode。
}
}
}
}
在Startup.Configure中添加中間件(在app.UseEndpoints之前):
app.UseMiddleware<ExceptionMiddleware>()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322496.html
標籤:
