ASP.NET MVC Routing über Methodenattribute
In der StackOverflow-Podcast #54Jeff erwähnt Sie die Anmeldung Ihrer URL-Routen in der StackOverflow-codebase, die über ein Attribut über die Methode, mit der route. Klingt wie ein gutes Konzept (mit der Einschränkung, dass Phil Haack brachte bezüglich der route Prioritäten).
Könnte jemand bieten einige Beispiel um das zu bewirken?
Auch alle "best practices" für die Verwendung dieser Art von routing?
InformationsquelleAutor der Frage TorgoGuy | 2009-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: Dies wurde geschrieben am codeplex. Den vollständigen source code sowie die vor-kompilierten assembly gibt es zum download. Ich hatte noch nicht die Zeit, um nach der Dokumentation auf der Website noch, so ist dies SO, wird die post muss für den Augenblick genügen.
UPDATE: ich habe wieder einige neue Attribute zu behandeln 1) route Bestellung, 2) parameter der route Einschränkungen, und 3) parameter der route default-Werte. Der folgende text spiegelt dieses update.
Ich habe tatsächlich etwas getan, wie dies für mein MVC-Projekten (ich habe keine Ahnung, wie Jeff es tut mit stackoverflow). Ich definierte eine Reihe von benutzerdefinierten Attributen: UrlRoute, UrlRouteParameterConstraint, UrlRouteParameterDefault. Sie kann angebracht werden, um MVC-controller-action-Methoden zu verursachen, - Routen, - Beschränkungen und-Standards gebunden werden, Sie automatisch.
Beispiel:
(Hinweis: dieses Beispiel ist etwas künstlich, aber es zeigt die Funktion)
Definition von UrlRouteAttribute:
Definition von UrlRouteParameterConstraintAttribute:
Definition von UrlRouteParameterDefaultAttribute:
Veränderungen der Globalen.asax.cs:
Ersetzen Aufrufe MapRoute, mit einem einzigen Aufruf der RouteUtility.RegisterUrlRoutesFromAttributes Funktion:
Definition von RouteUtility.RegisterUrlRoutesFromAttributes:
Dem vollständigen Quellcode ist bis auf codeplex. Bitte gehen Sie auf die Website, wenn Sie irgendwelche Anregungen oder bug-reports.
InformationsquelleAutor der Antwort DSO
Können Sie auch versuchen,AttributeRoutingdie aus github oder über nuget.
Dies ist eine schamlose, ich bin der Autor. Aber dang, wenn ich bin nicht sehr glücklich, es zu benutzen. Sie könnten auch. Es gibt viel Dokumentation und Beispiel-code in das github-repository wiki.
Mit dieser Bibliothek können Sie eine Menge tun:
Ich bin sicher, es gibt einige andere Sachen hab ich vergessen. Überprüfen Sie es heraus. Es ist schmerzlos zu installieren, die über nuget.
HINWEIS: 4/16/12, AttributeRouting unterstützt auch die neuen Web-API-Infrastruktur. Nur für den Fall, Sie suchen nach etwas, das verarbeiten kann. Dank subkamran!
InformationsquelleAutor der Antwort spot
1. Download RiaLibrary.Web.dll und verweisen Sie darauf in Ihrer ASP.NET MVC-website-Projekt
2. Decoreate controller-Methoden mit dem [Url] - Attribute:
BTW, '?' sign in '{?category} " als parameter bedeutet, dass es optional ist. Sie müssen nicht angeben werden, ist dies explizit in der route, was voreingestellt ist, ist gleich diesem:
3. Update Global.asax.cs-Datei
Wie zum festlegen von Standardeinstellungen und Beschränkungen? Beispiel:
Wie set bestellen? Beispiel:
InformationsquelleAutor der Antwort Konstantin Tarkus
Dieser Beitrag ist nur zu verlängern, DSO ' s Antwort.
Während der Konvertierung meiner Strecken, um die Attribute, die ich brauchte, Griff der ActionName-Attribut. So in GetRouteParamsFromAttribute:
Zudem fand ich die Namensgebung der route nicht geeignet. Der name wird dynamisch erstellt mit controllerName.RouteName. Aber mein Weg-Namen sind const-strings in der controller-Klasse und ich die const zu nennen Sie auch die Url.RouteUrl. Das ist, warum ich wirklich brauchen, die route name in das Attribut der name der route.
Andere Sache, die ich tun, ist die Umwandlung von Standard-und constraint-Attribute AttributeTargets.Parameter, so dass ich bleiben kann Ihnen params.
InformationsquelleAutor der Antwort Nicolas Cadilhac
Habe ich kombiniert diese beiden Ansätze in einem Frankensteinian version für jeden, der es will. (Ich mochte die optional param notation, aber auch dachte, Sie sollten separaten Parametern vom default/Einschränkungen anstatt alles vermischt in einem).
http://github.com/djMax/AlienForce/tree/master/Utilities/Web/
InformationsquelleAutor der Antwort Max Metral
Die ich brauchte, um die ITCloud routing arbeitet in asp.net mvc 2 mit einem AsyncController --, dies zu tun, ändern Sie einfach den RouteUtility.cs Klasse in der Quelle und kompilieren Sie neu. Sie haben, um Streifen aus der "Beendet" - von den Namen der Aktion in Zeile 98
Dann, in der AsyncController, schmücken die XXXXCompleted ActionResult mit dem bekannten
UrlRoute
undUrlRouteParameterDefault
Attribute:Hoffe, das hilft jemandem mit dem gleichen Problem.
InformationsquelleAutor der Antwort TimDog