wake-up-neo.net

RoutePrefix vs Route

Ich verstehe, dass RoutePrefix der Routing-Tabelle selbst keine Route hinzufügt. Für Ihre Aktionen müssen Sie ein Route Attribut deklarieren. Es fällt mir schwer, ein maßgebliches Blog/eine maßgebliche MSDN-Seite/etwas zu finden, aus dem hervorgeht, warum RoutePrefix der Routing-Tabelle keine Route hinzufügt.

Hat jemand einen maßgeblichen Beitrag, der dies enthält, und wenn ja, lassen Sie mich wissen, um wen es sich handelt? Vielen Dank.

Bearbeiten Um meine Frage zu klären

FUNKTIONIERT NICHT

[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
    public int get(){return 1000000;}
}

Funktioniert

[RoutePrefix("api/Steve")]
public class SteveController : ApiController
{
    [Route("")]
    public int get(){return 1000000;}
}

Das obige Szenario funktioniert, da wir ausdrücklich angegeben haben, dass die Aktion get für SteveController eine leere Route enthält. Sobald wir das tun, wird die Route zum RouteTable hinzugefügt

Das erste Szenario funktioniert nicht, da nur die Verwendung von RoutePrefix der Routentabelle nichts hinzufügt. RoutePrefix alleine generiert keine Route. Dies scheint allgemein bekannt zu sein, Ich möchte eine Quelle wissen, aus der hervorgeht, warum dies so ist. Bevorzugt ein angesehenes Community-Mitglied, z. B. Jon Skeet oder jemand aus dem Microsoft-Team.

21
gh9

Routenpräfixe werden bei der Attributweiterleitung standardmäßig mit Routen verknüpft.

Es wird verwendet, um ein gemeinsames Präfix für einen gesamten Controller festzulegen.

Wenn Sie die Versionshinweise lesen, in denen die Funktion vorgestellt wurde, erhalten Sie möglicherweise ein besseres Verständnis des Themas.

ASP.NET Web API 2

Attribut-Routing

Dank eines Beitrags von Tim McCall unterstützt die ASP.NET-Web-API jetzt das Routing von Attributen. Mit dem Attribut-Routing können Sie Ihre Web-API-Routen angeben, indem Sie Ihre Aktionen und Controller wie folgt kommentieren:

[RoutePrefix("orders")] 
public class OrdersController : ApiController 
{ 
    [Route("{id}")] 
    public Order Get(int id) { } 
    [Route("{id}/approve")] 
    public Order Approve(int id) { } 
} 

Das Attributrouting gibt Ihnen mehr Kontrolle über die URIs in Ihrer Web-API. Beispielsweise können Sie eine Ressourcenhierarchie auf einfache Weise mit einem einzelnen API-Controller definieren:

public class MoviesController : ApiController 
{ 
    [Route("movies")] 
    public IEnumerable<Movie> Get() { } 
    [Route("actors/{actorId}/movies")] 
    public IEnumerable<Movie> GetByActor(int actorId) { } 
    [Route("directors/{directorId}/movies")] 
    public IEnumerable<Movie> GetByDirector(int directorId) { } 
} 

Was ist neu in ASP.NET Web API 2.1

Neue Funktionen in ASP.NET Web API 2.2

Ein wirklich guter Artikel zu diesem Thema

ASP.NET 5 Deep Dive: Routing

Obwohl ich kein Experte in diesem Bereich bin, verstehe ich hier, wie das funktioniert.

Beim Attributrouting überprüft das Framework das Routenattribut auf die Aktionen eines Controllers, um Routeneinträge zu erstellen, die der Routentabelle hinzugefügt werden sollen. Solange Sie das Attribut-Routing verwenden, verwenden Sie das [RouteAttribute]. Ohne dieses Attribut kehrt die Aktion standardmäßig zum konventionellen Routing zurück. Das RoutePrefixAttribute ist ein Erweiterungspunkt, mit dem Sie mehr Kontrolle darüber haben, wie Sie Ihre Routen/URLs definieren. Die Release Notes sagen das auch.

Abgesehen von meinem Verständnis und dem letzten angegebenen Link wurde alles andere aus der MS-Dokumentation zitiert.

19
Nkosi

Als maßgebliche Quelle dienen hier die Beschreibungen von MSDN (Hervorhebung von mir).

RouteAttribute

Platziere sie auf einem Controller oder einer Aktion, um sie direkt über eine Route freizulegen . Wenn es auf einem Controller platziert wird, gilt es für Aktionen, auf denen sich keine System.Web.Mvc.RouteAttribute befinden.

RoutePrefixAttribute

Kommentiert einen Controller mit einem Routenpräfix, das für alle Aktionen innerhalb des Controllers gilt.

Wie Sie sehen, wird in der Beschreibung für Route die Enthüllung der Aktion (en) erwähnt, nicht jedoch für RoutePrefix.

7
Robert Dennis