【发布时间】:2022-12-03 09:14:34
【问题描述】:
我正在处理一个 ASP.NET Core Web API 程序。
众所周知,当url不匹配任何端点时,服务器会自动返回404代码。
现在我希望服务将这些请求记录到日志中,所以我想为它们设置一个默认处理程序。
可能吗?如何?
【问题讨论】:
标签: c# asp.net http asp.net-web-api
我正在处理一个 ASP.NET Core Web API 程序。
众所周知,当url不匹配任何端点时,服务器会自动返回404代码。
现在我希望服务将这些请求记录到日志中,所以我想为它们设置一个默认处理程序。
可能吗?如何?
【问题讨论】:
标签: c# asp.net http asp.net-web-api
对的,这是可能的。您可以创建一个自定义中间件来记录所有不匹配任何端点的请求。中间件应该捕获所有请求,并在将它们传递给 404 处理程序之前记录它们。您可以通过实现 IMiddleware 接口并将其添加到 Startup 类的 Configure 方法中的请求管道来创建中间件。
【讨论】:
要为不匹配任何终结点的 URL 设置默认处理程序,您可以在 ASP.NET Core Web API 项目中使用 UseStatusCodePagesWithReExecute 中间件。
以下是如何使用此中间件的示例:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStatusCodePagesWithReExecute("/error/{0}");
// Other middleware and configuration
}
在此示例中,UseStatusCodePagesWithReExecute 中间件用于处理导致 HTTP 状态代码为 404(未找到)的任何请求。此中间件将重新执行请求并将状态代码传递到指定的 URL(在此示例中为 /error/{0}),您可以在其中处理它并根据需要记录请求。
您还可以使用此中间件来处理其他 HTTP 状态代码,方法是在对 UseStatusCodePagesWithReExecute 的调用中指定它们。例如,以下代码将同时处理 404 和 500 HTTP 状态代码:
app.UseStatusCodePagesWithReExecute("/error/{0}", "404,500");
【讨论】: