Entschuldigung für eine Frage eher N00b, ich bin ziemlich neu in ASP.NET MVC. Mein Problem ist wie folgt:MVC 3 Fall-Through-Routing
Ich möchte meine Website eine URL in der folgenden Art und Weise zu handhaben:
www.mysite.com/homepage/name
ich den Link oben das Profil des Benutzers zu gehen. Der Einfachheit halber ist der Controller der Homepage-Controller mit der Test-Aktion.
Was bedeutet, dass die global.asax Routing wird:
routes.MapRoute(
"test",
"homepage/{name}",
new { controller = "Homepage", action = "Test" }
);
Bis jetzt der Code funktioniert gut (ich es getestet und es Routen ok).
Aber jetzt meine andere Funktionalität, die ich will, ist zu aktivieren:
www.mysite.com/homepage/action/id
als gut zu funktionieren.
Das Routing für diese sein wird:
routes.MapRoute(
"Default",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional }
);
Das Problem ist, was passiert, wenn ein Benutzer die {id} für eine Aktion, die Routing-Tabelle wegzulassen feststellt, dass der Aktionsname tatsächlich der {Name ist } Parameter.
Gibt es eine Möglichkeit, zuerst zu überprüfen, ob eine Aktion existiert. Und nur wenn dies nicht der Fall ist, verwenden Sie es als Parameter für eine andere Route.
Macht Sinn? Wenn nicht, füge ich noch weitere Details hinzu.
Danke!
EDIT
So habe ich es geschafft habe, diese zu lösen die Einschränkungen mit regex Ich legte einen regulären Ausdruck definiert, ein alle Aktionen in meinem Controller:
routes.MapRoute(
"homepage",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional },
new { action = "(action1|action2|action3)" }
);
Und dann die nächste Regel:
routes.MapRoute(
"feed",
"homepage/{id}",
new { controller = "Homepage", action = "Test"}
);
Ich arbeite ok, nur ist es schwer zu skalieren. Sie müssen daran denken, jede neue Aktion auf den Controller innerhalb der Zeichenfolge hier zu platzieren. Es ist eine große Öffnung für Debug-Albträume.
Vielen Dank!
Was passiert, wenn ein Benutzer ein Konto mit dem Namen Index erstellt, oder was auch immer Ihr Aktionsname ist? –
Ich vermute, dass alles mit DB-Management synchronisiert werden muss. Es ist eine gute Frage. Die Art und Weise, wie wir es tun, erzeugt diese Schnecken selbst, also behalten wir uns das Recht vor, einige Strings zu reservieren. – oamsel
Ich denke, mein Punkt ist, dass es wirklich besser ist, Dinge so zu konstruieren, dass solche Verwirrungen nicht auftreten können, wenn man einen anderen Pfad benutzt. –