我正在使用庫Microsoft.AspNetCore.Http和Microsoft.AspNetCore.Mvc. 我也在使用 Identity 的 JWT 令牌。
當令牌過期時,API 會拋出 http 401 錯誤,如果宣告錯誤,則回傳 http 403 錯誤。
我需要能夠捕捉到這兩個雕像并將它們包裝在我統一的錯誤訊息格式中
public class ErrorMessage
{
public int httpStatus { get; set; }
public string Header { get; set; } = "Error";
public string Message { get; set; }
}
我的標準 API 格式
[Authorize]
[HttpPost]
[Route("Logout")]
public async Task<IActionResult> Logout()
{
try
{
....
}
catch (Exception e)
{
_logger.LogError($"Error in {nameof(Login)}: {e}");
return BadRequest(new ErrorMessage { httpStatus = 500, Message = e.Message });
}
}
uj5u.com熱心網友回復:
根據ASP.NET Core 中的處理錯誤,您可以使用UseStatusCodePages:
app.UseStatusCodePages(async statusCodeContext =>
{
switch (statusCodeContext.HttpContext.Response.StatusCode)
{
case 401:
statusCodeContext.HttpContext.Response.StatusCode = 400;
await statusCodeContext.HttpContext.Response.WriteAsJsonAsync(new ErrorMessage { httpStatus = 500, Message = "some message" });
break;
case 403:
statusCodeContext.HttpContext.Response.StatusCode = 400;
await statusCodeContext.HttpContext.Response.WriteAsJsonAsync(new ErrorMessage { httpStatus = 500, Message = "some message" });
break;
}
});
uj5u.com熱心網友回復:
您可以通過將以下內容添加到 Startup.cs 中的 Configure 方法來完成此操作
這將讓您攔截和更改回應的各個方面以及內容型別。在下面的示例中,我們將回傳一個帶有 Message 的簡單 JSON 物件。
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == (int)HttpStatusCode.Unauthorized) // 401
{
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(new {
Message = "You must be logged in to access this resource."
}.ToString());
}
if (context.Response.StatusCode == (int)HttpStatusCode.Forbidden) // 403
{
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(new
{
Message = "Your claims are incorrect."
}.ToString());
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372570.html
標籤:C# asp.net核心 asp.net-core-webapi
下一篇:從LINQ查詢中檢索單個元素
