2

.Net Core フレームワークでの API のバージョン管理について明確にする必要があります。

私のクライアントは、バージョンがルーターレベルで処理されることを望んでいます。お気に入り

[Route("1/[controller]")]
public class SampleController : Controller
{
    [HttpGet("version")]
    public IActionResult GetVersion()
    {
        return Ok({"Message": "API Version 1"});
    }
}

https://www.somedomain.com/api/1/sample/versionを使用してこれにアクセスします

IIS で、デフォルトの Web サイトの下に「api」というアプリケーションを作成し (URL のパス「api」はここで処理されます)、ここでコードをホストします。

API のバージョン管理を行うために、ここに従うことができるより良い方法は何ですか。

  1. これはできますか?

    [ApiVersion("1")]
    [Route("{version:apiVersion}/[controller]")]
    public class SampleController : Controller
    {
        [HttpGet("version")]
        public IActionResult GetVersion()
        {
           return Ok({"Message": "API Version 1"});
        }
    
        [HttpGet("version"), MapToApiVersion("2" )]
        public IActionResult GetVersion()
        {
            return Ok({"Message": "API Version 2"});
        }
    }
    
  2. IIS のアプリケーションの下にアプリケーションを作成することは可能ですか。お気に入り、

デフォルト Web サイト -> api -> 1 -> API バージョンが記載されていないコード

既定の Web サイト - > api -> 2 -> API バージョンが記載されていない更新されたコード

  1. または、IIS でアプリケーションとしてバージョンを作成し、各アプリケーション バージョンの下にコードを展開できますか。お気に入り、

既定の Web サイト - > 1 -> API バージョンが記載されていないコード

既定の Web サイト - > 2 -> API バージョンが記載されていない更新されたコード

これは、私が好まない API URL を変更することになります。私はまだ同じURIを使いたいです。https://www.somedomain.com/api/1/sample/version
を使用してこれにアクセスします

ここで私が従うことができる最善のアプローチを教えてください。

4

4 に答える 4

1

ASP.NET Web API、ASP.NET Web API を使用した OData、および ASP.NET Core アプリケーションに API のバージョン管理を追加するための一連のライブラリを提供する一般的なリポジトリを次に示します。

ASP.NET Core アプリケーションの場合、パッケージ マネージャー コンソールで次のコマンドを実行して、このリポジトリの ASP.NET Core API バージョン管理をインストールできます。

Install-Package Microsoft.AspNetCore.Mvc.Versioning
于 2017-01-16T19:28:18.803 に答える
0

おそらく、 ApplicationBuilder の Map 拡張メソッドがニーズに合っています。

app.Map( "/1", myVersion1MappingFunction)

Startup の Configure メソッドで、myVersion1MappingFunction に個別のミドルウェア パイプラインを構成させます。

private static void myVersion1MappingFunction( IApplicationBuilder app)
{
   // start your special middleware for version 1
   app.UseMvc( routes =>
   {
       routes.MapRoute( ... );
   }
}

Map 拡張機能を使用すると、フラグメント ("/1") が削除されますHttpRequest.Path

于 2017-01-11T15:19:33.743 に答える