2017-09-28 16 views
1

私はこのチュートリアルの後にバージョン管理を実装しようとしています。だから私のスタートアップに私が持っている:ASP.NET WebApiのバージョンが動作しない

var constraintResolver = new DefaultInlineConstraintResolver() 
{ 
    ConstraintMap = 
    { 
     ["apiVersion"] = typeof(ApiVersionRouteConstraint) 
    } 
}; 

configuration.MapHttpAttributeRoutes(constraintResolver); 
configuration.AddApiVersioning() 

と私のコントローラ:私はhttp://localhost/api/v1.0/myのために要求すると

[Route("api/v{version:apiVersion}/my")] 
[ApiVersion("1.0")] 
[ApiVersion("2.0")] 
public class MyV1Controller 

[Route("api/v{version:apiVersion}/my")] 
[ApiVersion("3.0")] 
public class MyV3Controller 

私はエラー

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL.\r\n\r\nThe request has found the following matching controller types: \r\nMyV1Controller\r\nMyV2Controller 

あなたは、コントローラのバージョンを作成する方法をアドバイスしてもらえ取得します働く?

+0

あなたの "V1"コントローラは複数のバージョンを持つことができますか? V1コントローラは1つのバージョンですか?なぜ2つの属性がありますか? –

+0

これはあなたのURLにドットで問題がある可能性があります。 –

+0

私のAPIはいくつかのコントローラで構成されています。他のコントローラーに影響を与えるバージョン2があったが、MyV1Controllerに変更はなかった。だから私は数を増やした。 – krzyszt0fd

答えて

0

私は休憩をとりました。自分のプロジェクトでは、DefaultHttpControllerSelectorを拡張するカスタムIHttpControllerSelector実装があることを思い出しました。

configuration.Services.Replace(typeof(IHttpControllerSelector), new ApiControllerSelector(config)); 

削除した後、バージョン管理が動作し始めました。 configuration.AddApiVersioningを実行すると、ServicesContainerにApiVersionControllerSelectorが設定されます。私のカスタム実装に誤って置き換えられました。

関連する問題