如何知道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。
所以我认为应该有其他的东西可以帮助?
我认为这是一件棘手的事情…您可能需要考虑的一些信息:
-
与WebHost(IIS)和SelfHost相比,路由匹配发生在不同的阶段。Web API 堆栈图参考。
- WebHost -甚至在任何消息处理程序运行之前发生。所以你的如果路由没有被执行,委派处理程序甚至都不会被执行匹配。
- SelfHost -在消息处理程序运行和返回后发生HttpRoutingDispatcher。在这种情况下,委托处理程序将被执行,可能会检查响应的状态码,但由于下一点,即使这样也容易出错。
-
404响应可能是由于路由不匹配,或者如果路由匹配,但某些应用程序级代码响应了404(例如:api/Products/10可以返回404,如果没有找到id为10的产品)。因此,这里的任务是查找路由匹配是否生成404或应用程序级代码。