0

まあ、属性ルーティングでASP.NET Web API 2を使用しています。私は2つのコントローラーを持っています:2つの異なるコントローラのWeb Apiルーティング競合?

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

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

私は両方のコントローラーですべてのCURDメソッドを持っています。現在、すべてのメソッドはPOSTを除いて正常に動作しています。興味深いことに

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

、完全にOK MenusController作品のPOST方法:私はMenuItemsControllerPOSTメソッドを呼び出そうとするたびに、私は次のエラーを取得します。問題の原因となっているのはMenuItemsControllerPOSTメソッドだけです。 私はOrderプロパティをRouteとして使ってみましたが、無駄でした。

ご協力いただきまして誠にありがとうございます。

EDIT: マイPOSTメソッドのルートは以下の通りです:

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

私は同じ問題があると思います。私は1つのコントローラに 'GET v1/Jobs /'を持っています。 'GET v1/Jobs/Materials'と' PUT v1/Jobs/{jobID}/Materials/{matID} 'を' MaterialsController'に追加しました。しかし、PUTやPOSTを 'JobsController'に追加すると、ルーティングで' Jobs'プレフィックスを使用するすべてのコントローラが破損します。 –

答えて

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:ソリューションを簡略化するために「取得」を使用しました。

+0

うん、それは動作します。しかし、私のコントローラーはすでに長すぎます。それを整理しておきながらこの作業を行う方法は他にありませんか? – Aneeq

+0

はい、私はそれをチェックしました –

+0

私はコントローラを組み合わせる以外の他のソリューションを意味する? – Aneeq

関連する問題