2017-08-17 69 views
1

我有一大堆的控制器,並想通過航段他們分爲兩組:如何通過路由在網絡API分裂控制器2

  config.Routes.MapHttpRoute(
       "r1", 
       "api/v1.0/route1/{controller}/{action}/{id}", 
       new {id = RouteParameter.Optional} 
      ); 

      config.Routes.MapHttpRoute(
       "r2", 
       "api/v1.0/route2/{controller}/{action}/{id}", 
       new { id = RouteParameter.Optional } 
      ); 

我以爲我可以像這樣做:

[RoutePrefix("api/v1.0/route1")] 
    public class MyController : ApiController 

爲了讓它只有route1,但我可以通過route2命中它。

我也試過

[RoutePrefix("route1")] 
     public class MyController : ApiController 

具有相同的結果。我如何讓MyController只能沿着route1走下去?任何幫助一如既往,非常感激。

+1

刪除MapHttpRoute()函數調用並切換所有屬性路由將是一個簡單的解決方案。 – chambo

+0

readup on https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 – Nkosi

回答

1

你想

[RoutePrefix("api/v1.0)] 
public class MyController : ApiController 

,然後在方法本身

[Route("route1")] 
public async Task<HttpResponseMessage> RouteOne(object params) 
{ 
... 
} 


[Route("route2")] 
public async Task<HttpResponseMessage> RouteTwo(object params) 
{ 
... 
} 

同意評議誰說獨自離開MapHttpRoute。應該看起來像這樣:

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

*抱怨不得不觸摸每一個控制器*看起來沒有更好的方法來做到這一點,這主要是我想知道的,謝謝! – RandomUs1r