2017-01-27 7 views
0

標準のasp.netコントローラに関連する同様の質問がありましたが、試してみましたが、apicontrollerで動作していないようです。ASP.NETでコントローラネームスペースへのAPIルートを制限する

Restrict route to controller namespace in ASP.NET Core

私は、URLを変更することなく、将来的には廃止されるためのAPIを可能にします。これを解決するために、ルートの最初にバージョン接頭辞を入れます。この方法では、このAPIとの統合を破ることなく、エンドポイントにいくつかの変更を加えることができます。

config.Routes.MapHttpRoute(
     name: "V1 API", 
     routeTemplate: "v1/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 

    ); 
    config.Routes.MapHttpRoute(
     name: "V2 API", 
     routeTemplate: "v2/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 

    ); 

私は、同じコントローラ名を維持したいとほとんどの場合、すべてが正確に同じになり、レスポンスとリクエストボディは変更のみのものとなります。私は、コントローラーの名前空間にv1とv2を追加するために、コントローラーフォルダーにサブディレクトリーを追加しようとしましたが、同じ名前のコントローラーが2つあるというエラーが表示されます。

コントローラ内のクラスを検索するのではなく、コントローラのv1名前空間を指すようにルートを変更するにはどうすればよいですか。私はリビジョンの更新を可能な限りシームレスにしたいので、コントローラ名にバージョンを追加する必要はありません。

答えて

0

各コントローラにルートプレフィックスを追加することでこの問題を解決できると思います。

0

URLクエリパラメータを使用できますか?

https://localhost:8000/{controller}/{action}/{id}?version=?

あなたは、バージョンに基づいて、使用するどのようなロジックを決定するために、コントローラ内の制御フローを使用することができます。

+0

これを使って要求を正しいコントローラにルーティングできますか? –

+0

バージョンごとに別々のコントローラを使用したい場合は、@TarekAboELkheirソリューションの投稿が有効です。私が見つけた唯一の問題は、v2 {ControllerName}がちょっと不器用に見えることです。 –

関連する問題