2017-06-30 14 views
1

私はREST MVCプロジェクトに取り組んでいます。 APIプロジェクトのバージョン管理について調べるASP.Net APIバージョン管理の問題

要求は別のASP.NET MVCプロジェクトに送信され、別のプロジェクトの別のクライアントエージェントに送信されます。最後に、クライアントエージェントは要求をAPIプロジェクト(ASP.Netコア)に流します。

バージョン管理はAPIプロジェクト上に行われます。

私は自分のAPIのいずれかでクイックバージョン管理を実装しており、うまく動作します。しかし、私がやったやり方は私の問題です。私は 'Client Agent'プロジェクトの要求されたURLに実際のバージョン(v1.0)をハードコードしています。 APIの必要なバージョンをどこで指定する必要があるかを知る必要があります。私はそれがクライアント側(javascriptかもしれない)からでなければならないということです。お知らせ下さい。

ルートは常にこれに基づいているので、私は、ルート規則を実装しました:

「API/V {バージョン:apiVersion} /コントローラ」

しかし、私はまだ指定する方法を、知りませんClient Agentプロジェクトに入る前のバージョン。

public class RouteConvention : IApplicationModelConvention 
{ 
    //private readonly AttributeRouteModel _centralPrefix; 

    private readonly string _versionConstraintTemplate; 
    private readonly string _versionedControllerTemplate; 

    public RouteConvention() //IRouteTemplateProvider routeTemplateProvider 
    { 
     //_centralPrefix = new AttributeRouteModel(routeTemplateProvider); 

     _versionConstraintTemplate = "v{version:apiVersion}"; 
     _versionedControllerTemplate = $"{_versionConstraintTemplate}/[controller]"; 
    } 

    public void Apply(ApplicationModel application) 
    { 
     foreach (var applicationController in application.Controllers) 
     { 
      foreach (var applicationControllerSelector in applicationController.Selectors) 
      { 
       if (applicationControllerSelector.AttributeRouteModel != null) 
       { 
        var versionedConstraintRouteModel = new AttributeRouteModel 
        { 
         Template = _versionConstraintTemplate 
        }; 

        applicationControllerSelector.AttributeRouteModel = 
         AttributeRouteModel.CombineAttributeRouteModel(versionedConstraintRouteModel, 
          applicationControllerSelector.AttributeRouteModel); 
       } 
       else 
       { 
        applicationControllerSelector.AttributeRouteModel = new AttributeRouteModel 
        { 
         Template = _versionedControllerTemplate 
        }; 
       } 
      } 
     } 
    } 
} 

は、クライアントは多くの方法で必要なバージョンを指定することができ

答えて

0

を教えてください:

以下は私のルート大会クラスです。これは、URL、ヘッダー、クエリパラメータなどの一部にすることができます。すべては、API契約がクライアントに送信することを期待する場所によって異なります。 あなたはこれを見ることができますASP.NET Versioning

あなたが実装したルート規約に戻ります。 URLモデルを見ると、URLにクライアントが指定したバージョンを持つように見えます。もしそうなら、RouteConventionを再考する必要があります。ルート規則からルートのバージョン部分を削除し、ルートのバージョン部分をコントローラレベルで構成します。 たとえば、

[Route("v1/values")] 
public class ValuesController : Controller 
{ 
    // GET api/v1/values 
    [HttpGet] 
    public string Get() 
    { 
    } 
} 

[Route("v2/values")] 
public class Values2Controller : Controller 
{ 
     // GET api/v2/values 
     [HttpGet] 
     public string Get() 
     { 
     } 
} 

しかしには、再び、あなたは最高のあなたのニーズに合ったものを選ぶことができるバージョン管理を実装する複数の方法があります。 ASP.NET API Versioningは正しい方向にスタートさせるはずです。

関連する問題