2013-05-21 70 views
1

我想將請求記錄到導致404(這意味着路由引擎找不到匹配的服務)的Web API應用程序。如何知道Web API路由引擎何時找不到匹配的服務?

這怎麼可能?

舉例來說,如果我有以下映射:

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

然後調用下面將返回404:

api_rootNotValid/controllername 

我想捕捉這樣的請求,並記錄它們。

我已經創建了一個繼承自DelegatingHandler的類,但只有當路由引擎成功找到服務後纔會進入DelegatingHandler。

所以我覺得應該有其他的東西可以幫助嗎?

+1

http://haacked.com/archive/2011/04/12/routedebugger-2.aspx and this http://stackoverflow.com/questions/717628/asp-net-mvc-404-error - 處理 –

回答

0

我覺得這是一個棘手的事情......有些信息,你可能需要考慮:相對於虛擬主機提供商(IIS)和SelfHost時

  • 路線匹配發生在不同的階段。 Web API Stack Diagram以供參考。

    • WebHost - 甚至在任何消息處理程序運行之前發生。因此,如果路線不匹配 ,您的 委派處理程序甚至不會執行。
    • SelfHost - 發生在消息處理程序運行後,並在 HttpRoutingDispatcher。在這種情況下,您的委託處理程序將執行 ,並且可能會檢查響應的狀態代碼 ,但即使這樣也容易出錯,這是由於下一點。
  • 404響應可能是由於路線不匹配或者如果路由匹配,但某些應用程序級代碼迴應404(例如到:API /產品/ 10可以返回404,如果產品與ID是10不找到)。因此,這裏的任務是查找路由匹配是否生成404或應用程序級代碼。

相關問題