問題タブ [api-versioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Microsoft.AspNet.WebApi.Versioning による Web API 2 のバージョン管理
ASP.NET Versioning Libraryを使用しています。手順に従って、このライブラリを非常に基本的な ASP.NET Web API 2 プロジェクトに追加しました。ファイルの内容は次のとおりです:
Global.asax
ファイル:
Web API 構成:
最初のコントローラー:
2 番目のコントローラー:
アプリケーションを実行してこの URL に移動するとhttp://localhost:5428/api1/values?api-version=1.0
、目的の結果が得られますが、この URL に移動すると、次http://localhost:5428/api1/values?api-version=2.0
のエラー メッセージが表示No route providing a controller name with API version '2.0' was found to match request URI 'http://localhost:5428/api1/values'
されます。
[ControllerName]
何も変更せずに属性を削除ValuesController2
すると、問題が解決しません。
2番目のコントローラーの名前空間を変更しようとしましたが、問題も解決しませんでした!
このライブラリのバージョン3.0.1を使用しています。
asp.net-mvc - マイナー バージョンがない場合の .NET Core WebAPI フォールバック API バージョン
何度も試して記事を読んだ後、私の問題をここに置くことにしました。私が欲しいのは次のとおりです。アプリケーションのAPIバージョン管理に取り組んでいます。.NET Core (Microsoft.AspNetCore.Mvc.Versioning
パッケージ) でサポートされているバージョン形式は Major.Minor であり、これは私が取り組んでいるプロジェクトで使用したいものです。私が欲しいのは、クライアントによってマイナー バージョンが指定されていない場合のフォールバック バージョンです。私は.NETコア2.2を使用api-version
しており、ヘッダーで指定されています。対応する API バージョニング構成は次のようになります。
各バージョンに次の 2 つのコントローラーがあります: (コントローラーは、この SO の質問のために単純化されています):
クライアントが指定api-version=1.0
した場合、ValueControllerV10 が使用されます。もちろん、クライアントが を指定した場合api-version=1.1
は、予想どおり、ValueControllerV11 が使用されます。
そして今、私の問題があります。クライアントが指定した場合api-version=1
(マイナー バージョンを含まないメジャー バージョンのみ)、ValueControllerV10 が使用されます。私が間違っていなければ、はApiVersion.Parse("1")
に等しいからです。ApiVersion.Parse("1.0")
しかし、この場合に必要なのは、指定されたメジャー バージョンの最新バージョン (この例では 1.1) を呼び出すことです。
私の試み:
最初:[ApiVersion("1")]
で指定ValueControllerV11
それは機能しません、それはつながります
これを解決するために、私は 2 番目のアプローチを思い付きました。
2 番目: カスタムを使用しますIActionConstraint
。このために、私はこれらの記事に従いました:
- https://stevenknox.net/aspnet-core-mvc-action-priority-using-actionconstraints/
- https://www.strathweb.com/2017/06/using-iactionconstraints-in-asp-net-core-mvc/
次に、次のクラスを作成しました。
そしてで使用されValueControllerV11
ます:
まあ、それは を解決しますが、パッケージAmbiguousMatchException
のデフォルトの動作をオーバーライドするので、クライアントが を使用すると、404 Not Found が返されます。これは、の実装に従って理解できます。Microsoft.AspNetCore.Mvc.Versioning
api-version 1.1
HttpRequestPriority
3番目: MapSpaFallbackRoute
inStartup.cs
を条件付きで使用:
どちらも機能しません。影響はありません。その名前MapSpaFallbackRoute
は、私が使用する必要があるものではないという気持ちも与えます...
だから私の質問は次のとおりです。マイナーバージョンが指定されていない場合に、フォールバックの「最新のものを使用」動作を導入するにはどうすればよいapi-version
ですか? 前もって感謝します!