1

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

这怎么可能?

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

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

然后调用以下将返回 404:

api_rootNotValid/controllername

我想捕获此类请求并记录它们。

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

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

4

1 回答 1

0

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

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

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

于 2013-05-21T15:18:08.463 回答