2017-09-28 31 views
1

Ich versuche, API-Versionierung nach diesem Tutorial zu implementieren. Also in meinem Start ich habe:ASP.NET WebApi Versionierung funktioniert nicht

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

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

und meine Controller:

[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 

Wenn ich für http://localhost/api/v1.0/my beantragen bekomme ich einen Fehler

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 

Könnten Sie bitte beraten, wie Controller Versionierung machen arbeiten?

+0

Ihr "V1" -Controller kann mehrere Versionen haben? Wäre der V1-Controller eine Version? ... Warum zwei Attribute? –

+0

Dies kann ein Problem mit Punkt in Ihrer URL sein. –

+0

Meine API besteht aus wenigen Controllern. Während es eine Version 2 gab, die andere Conroller betraf, wurden an MyV1Controller keine Änderungen vorgenommen. Also habe ich einfach die Nummer erhöht. – krzyszt0fd

Antwort

0

Ich machte eine Pause und ich erinnerte mich daran, dass ich in meinem Projekt eine benutzerdefinierte IHttpControllerSelector-Implementierung, die DefaultHttpControllerSelector erweitert.

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

Nachdem ich es entfernt Versionierung begann zu arbeiten. Das Ausführen von configuration.AddApiVersioning legt ApiVersionControllerSelector in ServicesContainer fest. Es wurde versehentlich durch meine benutzerdefinierte Implementierung ersetzt.