MVC WebサイトにさまざまなWeb APIプラグインを追加しようとしています。 APIファイルのDLLをコピーして貼り付けすると、デフォルトのルート-hostname/api/{controller}/{id}を使用して適切なサービスメソッドを呼び出すことができますが、同じ名前のコントローラを別の場所に置くとエラーが発生しますDLL、名前空間)。エラーメッセージは次のようなものです(これは正常です)。ルート値(名前空間)に応じてASP.NET Web APIコントローラを選択してください
「名前」というコントローラに一致する複数のタイプが見つかりました。これは、このリクエスト( 'api/{controller}/{id}')に対応するルートが、同じ名前で異なる名前空間が定義された複数のコントローラを検出した場合に発生する可能性があります。 「名前」の要求は、次の一致するコントローラーを発見した:ApiExt.NamesController ApiExt1.NamesController
私は別のDLL(名前空間)ApiExt、ApiExt1で同じ「名前」のコントローラを持っています。
APIバージョンに応じてコントローラを選択するための類似のトピックが既に見つかりました - http://shazwazza.com/post/multiple-webapi-controllers-with-the-same-name-but-different-namespaces/、これは私に必要なものではありません。私は、ルート値に応じて、コントローラ(名前空間)を選択する必要があり、このような何か:
ホスト名/ API/{名前空間}/{コントローラ}/{ID}
私は、これは絶対にあると信じて可能ですが、私はMVCコントローラセレクタ(IHttpControllerSelectorの実装)をオーバーライドすることに慣れていません。
提案がありますか?
ありがとうございます。
WebAPiConfigまたはRouteConfigを転記してください。 – janhartmann
あなたのURLに名前空間を使用するのが好きです。なぜあなたのプラグインに独自のルートを登録させるだけではないのですか? – DavidG
私のプラグインも同様に動作するはずなので、カスタムルートを書く必要はありません。名前空間名はモジュール(プラグイン)名と一致するため、問題は今解決されました。ありがとう。 –