2016-04-05 12 views
1

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の実装)をオーバーライドすることに慣れていません。

提案がありますか?

ありがとうございます。

+0

WebAPiConfigまたはRouteConfigを転記してください。 – janhartmann

+0

あなたのURLに名前空間を使用するのが好きです。なぜあなたのプラグインに独自のルートを登録させるだけではないのですか? – DavidG

+0

私のプラグインも同様に動作するはずなので、カスタムルートを書く必要はありません。名前空間名はモジュール(プラグイン)名と一致するため、問題は今解決されました。ありがとう。 –

答えて

3

これは間違いなく可能です。 IHttpControllerSelectorを実装して、独自のコントローラセレクタを作成する必要があります。詳細な手順については、thisリンクを参照してください。

+1

ありがとうございます。これは本当に役に立ちました。 提供されたリンクに構文エラーが少しありました。そのため、より深いリンクは完全な回避策を提供します。 http://aspnet.codeplex.com/SourceControl/changeset/view/dd207952fa86#Samples/WebApi/NamespaceControllerSelector/NamespaceHttpControllerSelector.cs –

関連する問題