ASP.NET MVC-regex-route Einschränkung
Ich habe Probleme mit einer bestimmten Einschränkung, die ich versuche zum einrichten einer route. Meine URL muss wie folgt Aussehen: http://hostname/id-my-title-can-be-that-long where id zusammengesetzt ist, die mit der Ziffer nur und der Titel ist Kleinbuchstaben mit Bindestrichen separator. Die id und der Titel sind auch getrennt mit einem Bindestrich. Zum Beispiel: http://hostname/123-my-title.
Hier ist meine route:
routes.MapRoute(
"Test",
"{id}-{title}",
new { controller = "Article", action = "Index" },
new { id = @"(\d)+", title = @"([a-z]+-?)+" }
);
Die URL wird korrekt erstellt mit dem html-helper:
<%: Html.ActionLink("My link", "Index", "Article", new { id = Model.IdArticle, title = Model.UrlTitle }, null) %>
wo natürlich Modell.IdArticle ist Int32 und das Modell.UrlTitle einer vorgeformten Schnur von meiner Titel, die passen meine Anforderungen (Kleinbuchstaben nur, Leerzeichen durch Bindestriche ersetzt).
Das problem ist, wenn ich dem link Folgen, der passende controller & Methode nicht aufgerufen wird, fällt es auf die nächste route, die falsch ist.
Für die Akten, ich bin auf ASP.NET MVC 2.
Jemand eine Idee?
Vielen Dank im Voraus,
Fabian
InformationsquelleAutor Fabian Vilers | 2010-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen, vorbei an der ganze route-string "{id}-{title}" und analysiert die Zeichenfolge selbst per Hand, bevor es wieder in Ihre Aktion etwas zu tun, ähnlich wie Phil Haack ist slug-id actionfilter Attribut - link
Hoffe, das hilft.
Ah fair genug. Wird ein anderes denken 🙂
InformationsquelleAutor WestDiscGolf
Mehrere Zeichen in der route sind "Besondere" und teilt sich die Parameter wie und /. Es könnte sein, dass die extra -s in der route sind, verursacht es zu scheitern. Versuchen
"{id}-{*title}"
als dieser Titel macht auch alles, was folgt.Update
Die Antwort oben ist, was passiert, wenn Sie gehen auf StackOverflow, bevor Sie ' ve hatte genug Kaffee.
Kamen wir auf das gleiche problem im Umgang mit Dateinamen für die Dateien von den Nutzern hochgeladen, die die route enthalten '-' als Trennzeichen, könnte aber auch verwendet werden, in die der Wert in einer späteren parameter, es konnte erzeugen die richtige URL würde aber nicht dazu passen. Am Ende schrieb ich einen SpecialFileRoute Klasse damit umgehen und registriert diese route. Es ist ein bisschen hässlich, aber der job nicht.
Beachten Sie, dass ich gehalten im alten Stil MVC-route für die Generierung der URL, ich war Herumspielen mit bekommen, dies zu tun ist es richtig, aber es ist etwas, zurück zu kommen später.
Die route ist wie folgt Hinzugefügt:
Wie oben gesagt, das ist ein bisschen hässlich und wenn ich Zeit habe, es ist eine Menge Arbeit, die ich tun möchte, um dies zu verbessern, aber es löste das problem der Aufsplittung der URL in der benötigten Parameter. Es ist sehr stark gebunden an die spezifischen Anforderungen diese eine route mit dem url-Muster, Regex und Werte hart codiert, aber es sollte Ihnen beginnen.
D ' Oh, natürlich. Ich kam bis vor das gleiche problem vor einer Weile
InformationsquelleAutor Chao