我正在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/

10-12 17:25
查看更多