C# 如何知道Web API路由引擎何时找不到匹配的服务?

C# 如何知道Web API路由引擎何时找不到匹配的服务?,c#,asp.net-mvc,asp.net-web-api,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc Routing,我想将请求记录到我的Web API应用程序,结果是404,这意味着路由引擎找不到匹配的服务 那怎么可能呢 例如,如果我有以下映射: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new {

我想将请求记录到我的Web API应用程序,结果是404,这意味着路由引擎找不到匹配的服务

那怎么可能呢

例如,如果我有以下映射:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new
                    {
                        id = RouteParameter.Optional
                    }
                );
然后调用以下命令将返回404:

api_rootNotValid/controllername
我想捕获这些请求并记录它们

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


因此,我认为应该有其他方法可以帮助您?

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

与WebHostIIS和SelfHost相比,路由匹配发生在不同的阶段。Web API供参考

WebHost-甚至在运行任何消息处理程序之前发生。那么你的 如果路由不执行,则委托处理程序甚至不会执行 火柴 SelfHost—在消息处理程序运行并在 HttpRoutingDispatcher。在这种情况下,您的委托处理程序将 执行,可能会检查响应的状态代码, 但由于下一点,即使这样也容易出错。 404响应可能是由于路由不匹配,或者如果路由匹配但某些应用程序级代码已使用404响应,例如:如果未找到id为10的产品,则api/Products/10可以返回404。因此,这里的任务是找出路由匹配是生成404还是生成应用程序级代码

还有这个