2017-02-15 6 views
1

Ich verwende Microsoft.AspNetCore.Mvc.Versioning und ich habe Schwierigkeiten beim Einrichten der Routen richtig. Ich verfolge die Informationen von Hanselman Blog hier: http://www.hanselman.com/blog/ASPNETCoreRESTfulWebAPIVersioningMadeEasy.aspxMvc.Versioning korrekte Möglichkeit zum Erstellen von Routen

Ich möchte meine API über URIs zugreifen wie so:

http://me.com/api/v1/foo/bar

http://me.com/api/v1.0/foo/bar

ich die richtigen Attribute auf meine foo Klasse :

[ApiVersion("1.0")] 
[Route("api/v{version:apiVersion}/[controller]")] 

die oben genannten Arbeiten in Ordnung, aber wenn ich die unten (keine Version) Typ:

http://me.com/api/foo/bar

Ich erhalte eine 404, wenn sie der oben gehen (ich nehme an, weil die Strecke richtig für keine Version angegeben nicht eingerichtet ist).

Ich habe versucht, dies auf die Startup.cs Datei hinzufügen:

//Add the versioning 
services.AddApiVersioning(o => { 
     //Everytime a new version is created this must be updated to default to the latest version. 
     o.AssumeDefaultVersionWhenUnspecified = true; 
     o.DefaultApiVersion = new ApiVersion(1, 0); 
}); 

Aber das hat nicht funktioniert entweder - so dann habe ich die Strecke habe ich an der Spitze meiner foo Klasse/Controller gesucht:

[Route("api/[controller]")] 

Dies wird das gewünschte Verhalten, das ich will, und ich alle Routen unten zugreifen:

http://me.com/api/v1/foo/bar

http://me.com/api/v1.0/foo/bar

http://me.com/api/foo/bar

Ist das so, wie es getan werden sollte? Warum funktioniert die Standardversion nicht so, wie Hanselman es beschreibt?

Antwort

2

Beachten Sie, dass Scott bedeutet nicht, dass der URL-Pfad-Methode Segmentieren ermöglicht es Ihnen, eine leere Version zu geben:

Um klar zu sein, Ihnen die totale Kontrolle haben, aber das Ergebnis ist von außen recht sauber mit/api/v [1 | 2 | 3]/helloworld

Die Standardversion, die bei Verwendung der URL-Segmentzuordnung angegeben wird, wird nicht unterstützt. Siehe hierzu Github issue für weitere Informationen.

+0

Ich scheine einen 404 zu bekommen, auch wenn ~/v/foo/bar – Smithy

+0

Ja, es ist das gleiche wie meine Frage, außer dass ich '[Route (" api/[controller] ")] von meinem entfernt habe Controller – Smithy

+0

Was bedeutet "o.AssumeDefaultVersionWhenUnspecified = true;" Wird es abgeschrieben? – Smithy

Verwandte Themen