0

那麼,我正在使用ASP.NET Web API 2的屬性路由。我有兩個控制器,他們的路線有細微的差異:兩個不同控制器的Web Api路由衝突?

[RoutePrefix("api/menus")] 
public class MenusController : ApiController { 
} 

[RoutePrefix("api/menus/items")] 
public class MenuItemsController : ApiController { 
} 

我有兩個控制器中的所有CURD方法。現在除了POST之外,所有的方法都能正常工作。每當我嘗試調用的MenuItemsControllerPOST方法,我得到以下錯誤:

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL.

有趣的是,MenusController作品POST方法完全確定。這只是造成問題的MenuItemsControllerPOST方法。 我嘗試使用OrderRoute的財產,但徒勞無益。

任何幫助,高度讚賞。

編輯:POST方法路線低於:

  • POST api/menus/
  • POST api/menus/items
+0

我想我有同樣的問題。我在一個控制器中有一個'GET v1/Jobs /',例如在'MaterialsController'中的'GET v1/Jobs/Materials'和'PUT v1/Jobs/{jobID}/Materials/{matID}'可以正常工作。但是,當我將「PUT」或「POST」添加到「JobsController」時,所有在其路由中使用「作業」前綴的控制器都會中斷。 –

回答

1

Aneeq嘗試加入兩個控制器:

[RoutePrefix("api/menus")] 
public class MenusController : ApiController 
{ 
    [Route("")] 
    public string Get() 
    { 
     return "menus"; 
    } 
} 

[RoutePrefix("api/menus")] 
public class MenuItemsController : ApiController 
{ 
    [Route("items")] 
    public string Get() 
    { 
     return "menus items"; 
    } 
} 

我測試過,工作正常。它很酷嗎? PS:我使用「Get」只是爲了簡化解決方案。

+0

是的,它的工作原理。但事情是我的控制器已經太長了。有沒有其他的方式來完成這項工作,同時保持它的組織? – Aneeq

+0

是的,我讓它檢查出來 –

+0

我的意思是除了組合控制器之外的任何其他解決方案? – Aneeq