【问题标题】:How can I set a default handler for urls that don't match any endpoints?如何为不匹配任何端点的网址设置默认处理程序?
【发布时间】:2022-12-03 09:14:34
【问题描述】:

我正在处理一个 ASP.NET Core Web API 程序。
众所周知,当url不匹配任何端点时,服务器会自动返回404代码。

现在我希望服务将这些请求记录到日志中,所以我想为它们设置一个默认处理程序。
可能吗?如何?

【问题讨论】:

    标签: c# asp.net http asp.net-web-api


    【解决方案1】:

    对的,这是可能的。您可以创建一个自定义中间件来记录所有不匹配任何端点的请求。中间件应该捕获所有请求,并在将它们传递给 404 处理程序之前记录它们。您可以通过实现 IMiddleware 接口并将其添加到 Startup 类的 Configure 方法中的请求管道来创建中间件。

    【讨论】:

      【解决方案2】:

      要为不匹配任何终结点的 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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        相关资源
        最近更新 更多