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.
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.
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
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.
Als maßgebliche Quelle dienen hier die Beschreibungen von MSDN (Hervorhebung von mir).
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.
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
.