問題タブ [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.

0 投票する
2 に答える
2301 参照

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を使用しています。

0 投票する
3 に答える
4014 参照

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。このために、私はこれらの記事に従いました:

次に、次のクラスを作成しました。

そしてで使用されValueControllerV11ます:

まあ、それは を解決しますが、パッケージAmbiguousMatchExceptionのデフォルトの動作をオーバーライドするので、クライアントが を使用すると、404 Not Found が返されます。これは、の実装に従って理解できます。Microsoft.AspNetCore.Mvc.Versioningapi-version 1.1HttpRequestPriority

3番目: MapSpaFallbackRouteinStartup.csを条件付きで使用:

どちらも機能しません。影響はありません。その名前MapSpaFallbackRouteは、私が使用する必要があるものではないという気持ちも与えます...

だから私の質問は次のとおりです。マイナーバージョンが指定されていない場合に、フォールバックの「最新のものを使用」動作を導入するにはどうすればよいapi-versionですか? 前もって感謝します!