如何知道Web API路由引擎何时没有找到匹配的服务

本文关键字:服务 何时没 Web 何知道 API 路由 引擎 | 更新日期: 2023-09-27 18:14:49

我想记录导致404(这意味着路由引擎无法找到匹配的服务)的Web API应用程序的请求。

这怎么可能呢?

例如,如果我有下面的映射:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new
                    {
                        id = RouteParameter.Optional
                    }
                );

然后调用下面的代码将返回404:

api_rootNotValid/controllername

我想捕获这样的请求并记录它们。

我已经创建了一个继承自DelegatingHandler的类,但只有当路由引擎成功找到一个服务时,它才会进入DelegatingHandler。

所以我认为应该有其他的东西可以帮助?

如何知道Web API路由引擎何时没有找到匹配的服务

我认为这是一件棘手的事情…您可能需要考虑的一些信息:

  • 与WebHost(IIS)和SelfHost相比,路由匹配发生在不同的阶段。Web API 堆栈图参考。

    • WebHost -甚至在任何消息处理程序运行之前发生。所以你的如果路由没有被执行,委派处理程序甚至都不会被执行匹配。
    • SelfHost -在消息处理程序运行和返回后发生HttpRoutingDispatcher。在这种情况下,委托处理程序将被执行,可能会检查响应的状态码,但由于下一点,即使这样也容易出错。
  • 404响应可能是由于路由不匹配,或者如果路由匹配,但某些应用程序级代码响应了404(例如:api/Products/10可以返回404,如果没有找到id为10的产品)。因此,这里的任务是查找路由匹配是否生成404或应用程序级代码。