2015-08-16 61 views
0

爲什麼我AccessManagement路徑模板在MVC的Web API不可見2.config.Routes.MapHttpRoute得到覆蓋的Web API 2.0

// Web API routes 
//config.MapHttpAttributeRoutes(); 

//Just exclude the users controllers from need to provide valid token, so they could authenticate 
config.Routes.MapHttpRoute(
    name: "Authentication", 
    routeTemplate: "AccessManagement/", 
    defaults: new { controller = "AccessManagement" } 
); 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional }, 
    constraints: null, 
    //Create and instance of TokenInspector setting the default inner handler 
    handler: new TokenInspector() { 
     InnerHandler = new HttpControllerDispatcher(config) 
    } 
); 

我需要確保令牌,以保護其模板api/{controller}/{action}我所有的路線存在於頭只有一個路由沒有頭,其AccessManagement/

+0

第一條路線將不匹配任何東西,除了'www.whatever。 com/AccessManagement' –

+0

路由與「api/controller」而不是AccessManagement相匹配。然而,我正在尋找的是,請求應該匹配這兩種格式。任何解決方案 –

+0

你想匹配什麼路線? AccessManagement /什麼?那麼模板應該是'AccessManagement/{* whatever}' –

回答

1

因爲它是暴露的,你的第一個路由只匹配URL "/AccessManagement",它不會接受任何東西。

所以,給出的URL http://localhost:49531/AccessManagement/Authenticate並假設你AccessManagement控制器有一個名爲Authenticate一個動作,這條路線將匹配的網址:

config.Routes.MapHttpRoute(
    name: "Authentication", 
    routeTemplate: "AccessManagement/{action}", 
    defaults: new { controller = "AccessManagement" } 
); 
+0

這對我來說很有效,現在一切正在按照需要進行。但我不明白之前發生了什麼。我知道URL模板不匹配,因爲我傳遞的操作並未指定操作。有沒有辦法在.NET上查看路由表?另外當我應該使用'config.MapHttpAttributeRoutes();' –