同じ名前のコントローラを含む2つの異なるクラスライブラリがあります。Web apiコントローラの選択ルート
namespace OldApiService{
public class GreetingController: ApiController{
public string Get(){ return "hello from old api"; }
}
}
namespace NewApiService{
public class GreetingController: ApiController{
public string Get(){ return "hello from new api"; }
}
}
私はRouteと他のヘルパークラスを含む主要なWe Apiアプリケーションを持っています。この出願は、NewApiService
およびOldApiService
アセンブリを参照する。
namespace MyApi {
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{api}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
}
urlパラメータを指定したコントローラを選択します。
http://localhost:4035/api/old/greeting
はOldApiServiceコントローラ
http://localhost:4035/api/new/greeting
がNewApiServiceコントローラ
を使用します使用する私は、URLのルートの設定を変更しようとしましたが、働いていません。重複したコントローラエラーが発生しました。
コントローラの選択メカニズムを無効にする方法はありますか。単にルート値(古いものか新しいもの)を取得し、指定された名前空間からコントローラを選択します。
「挨拶」というコントローラに一致する複数のタイプが見つかりました。 このリクエストに対応するルート ( 'api/{version}/{controller}/{id}')が、同じ名前で異なる名前空間を持つ という複数のコントローラが定義されており、サポートされていない場合に発生します。 「あいさつ」の要求は、次のマッチング コントローラ発見した:OldApiService.GreetingController NewApiService.GreetingController
を、私は、これはasp.netのWeb APIの重要な問題だと思います。
あなたは両方のライブラリの制御が常に存在になるように、ルーティング属性を使用して検討している場合コンベンションに基づくルーティングを介した競合ルートをマッピングするときは、コントロール名にksを指定します。 – Nkosi
RoutePrefix属性を使用してみましたか? – peinearydevelopment
はいRoute属性を試しましたが、うまくいきませんでした。 – barteloma