我正在ASP.NET Core 3.1中的一个项目上。通过使用由4个不同层组成的干净架构,即持久性-域-应用程序-Web。
在Web层中,我有一个将由React进行管理的Admin区域,也有一个在线商店,它将使用此Admin区域,但是它将不使用REST API而作为html在线商店。我的REST API路由如下:localhost:5001/api/v1/...
我想了解,我如何制作一个自定义的错误处理中间件,当我的REST API服务中存在错误时,该中间件将能够以json的形式发送状态代码和错误消息,并且它能够当不使用REST API的html页面出现错误时,将它们作为html View 发送。
最佳答案
一种方法是按路径区分请求。
在Configure
方法中:
app.UseWhen(o => !o.Request.Path.StartsWithSegments("/api", StringComparison.InvariantCultureIgnoreCase),
builder =>
{
builder.UseStatusCodePagesWithReExecute("/Error/{0}");
}
);
这假设您的API Controller 已标记为
[ApiController]
属性,并且至少使用兼容版本2.2,该版本将呈现JSON问题详细信息(RFC7807)。编辑:无意中遗漏了HTML部分。您还需要一个 Controller 操作,该操作将路由错误代码以呈现HTML结果。就像是
[AllowAnonymous]
[Route("/Error/{code:int?}")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error(int? code)
{
ViewBag.Code = code.GetValueOrDefault(500);
return View();
}
以及匹配的Razor页面,例如
<h1>Error @(ViewBag.Code ?? 500)</h1>
关于c# - ASP.NET Core 3.1中的自定义错误处理中间件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62192942/