2017-01-04 10 views
2

.Net CoreフレームワークのAPIバージョン管理についていくつかの説明が必要です。.NETアプリケーションのAPIバージョン管理

私のクライアントは、バージョンをルータレベルで処理したいと考えています。同様

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

私は、IISでhttps://www.somedomain.com/api/1/sample/version

を使用して、このアクセス、私はデフォルトのWebサイトの下に(私のURLでパス「API」は、ここで気を取られます)「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

を使用して、このアクセス私はここに従うことができます最善の方法を教えてください。

+0

を持っていますかあなたは同じプロジェクトにそれらを持っていますか? –

+0

私はまだAPIのバージョン1です。私は同じプロジェクトを持つことを好む。 – Gugan

答えて

0

上記の最初のオプションについては、this linkにアップロードされたサンプルコードに従ってください。これはCodePlexのサンプルコードで、VersionedRouteの使い方を示しています。スタートアップの設定方法で

app.Map("/1", myVersion1MappingFunction) 

myVersion1MappingFunctionが別々のミドルウェア・パイプラインを設定してみましょう:

0

おそらくApplicationBuilderの地図の拡張メソッドは、あなたのニーズに合っ

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

地図拡張子にフラグメントを使用してオン( "/ 1")が削除されましたHttpRequest.Path

0

あなたが正しくURLパスセグメントのバージョンg ASP.NETコア用。それであなたの例ではではない別のWebサイトが展開されていると述べた。 1つのWebサイトが導入されており、ではなく、という既定のWebサイトでバージョン管理用の複数のアプリケーションを作成します。

URLパスセグメントのバージョン管理では、1つのWebアプリケーションがあり、そのアプリケーションはApiVersion規約を使用してすべてのルートを管理します。新しい機能で古い機能を提供し、すべての依存関係を管理できるようにコードを維持する必要があります。

このhereについてマイクロソフトが何を言っているのかを読んで、あなたの実装に合った簡単な概念証明をすることをお勧めします。

これは、バージョン管理のためにアプリケーションを複数回配備することに関する混乱を解消するのに役立ちたいと思っています。

0

あなたのケースでは、アプリケーションルーティング自体にバージョンを指定せずに、異なる配備とバージョンごとにフォルダを持つことができるように、Webサーバーレベルのバージョン管理を使用するのが最善の方法です。 (あなたのオプション2/3?)

しかし、IISはasp.netとは違って.netコアでリクエストをプロキシするだけなので、URL/URLでリバースプロキシを設定する必要があります。異なるバージョンにARRを書き直してくださいの展開

だからあなたが持っている可能性があり:

  1. /ルート/ V1/
  2. /ルート/ V2/
  3. など...あなたは説明のように。

各デプロイメントでは、異なるポート番号のkestrelが実行され、IISはURLによってプロキシを再解析します。

ここでは、ARRをurl-writeで設定する方法について説明します。それは心のasp.netで書かれたが、それは同じプリンシパルのだ:

                    Reverse Proxy with URL Rewrite v2 and Application Request Routing

0

HereがするAPIのバージョンを追加するためのライブラリのセットを提供して人気のリポジトリですASP.NET Web API、ASP.NET Web APIを使用したOData、およびASP.NET Coreアプリケーションが含まれます。 ASP.NETコアアプリケーションの場合

、あなたはinstallこのリポジトリのASP.NETコアAPIバージョンをパッケージマネージャコンソールで次のコマンドを実行してすることができます:あなたは、APIの異なるバージョンの異なるプロジェクトを

Install-Package Microsoft.AspNetCore.Mvc.Versioning 
関連する問題