MVC Routing - Parameternamen Frage
-
19-08-2019 - |
Frage
Ich bin auf der Suche nach Informationen über Routing in MVC mit C #. Ich bin zur Zeit sehr bewusst die Grundlagen in MVC von Routing, aber was ich suche ist etwas schwierig zu finden.
Effektiv, was ich will zu finden, ist eine Möglichkeit, eine einzelne Route zu definieren, die einen einzigen Parameter.
Die gemeinsamen Beispiele, die ich online gefunden haben alle rund um das Beispiel basiert
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Default", action="Index", id=""});
Durch diese Route zuordnen, können Sie zu jeder Aktion in jedem Controller Karte, aber wenn man etwas in die Aktion übergeben werden soll, muss die Methode Parameter „id“ bezeichnet werden. Ich möchte einen Weg, um dieses zu finden, wenn es möglich ist, so dass ich ständig Routen angeben müssen nicht verwenden nur einen anderen Parameternamen in meinen Handlungen.
Hat jemand eine Idee, oder einen Weg gefunden, um dies?
Lösung
Sie können die Routen konstruieren, wie Sie möchten
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{param1}/{param2}/{param3}"
new { controller = "Default", action="Index", param1="", param2="", param3=""});
Auch auf diesem Posten sehen , enthält es alle Arten von Proben in den Kommentaren
Andere Tipps
Wenn Sie einen anderen Parameternamen haben und hält das gleiche Routing-Variable, verwenden Sie die FromUri Attribut wie folgt:
public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
// do stuff
}
Ihre Routen, alles, was Sie brauchen, ist:
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Default", action="Index", id=""});
Ich glaube nicht, dass Sie genau das tun können, was Sie fordern. Wenn MVC eine Aktion ruft es für die Parameter in Routen sucht, fordern params und die Abfrage-String. Es sieht immer die Parameternamen übereinstimmen.
Vielleicht guter alter Abfrage-String Ihre Wünschen entspricht.
~/mycontroller/myaction/?foobar=123
wird 123 passieren zu dieser Aktion:
public ActionResult MyAction(int? foobar)
Ich weiß, das vor Jahrhunderten, aber hoffen, dass es noch jemand hilft. Ich fragte die gleiche Frage vor. Ich denke, das ist das, was Sie suchen. Eine Antwort aus meiner Frage Post zitiert:
„Die {* pathInfo} Bit wird eine Schnecke genannt. Es ist im Grunde ein Platzhalter sagen‚alles nach diesem Punkt in einen Parameter gefüllte pathInfo genannt‘. Wenn Sie also haben‚{Ressource} .axd / {* pathInfo}‘und eine URL wie folgt aus: http://blah/foo.axd/foo/bar/baz/bing
dann zwei Parameter erstellt bekommen, eine namens Ressource, die foo und eine namens pathInfo die foo / bar / baz enthält / bing enthalten würde „.
Auch wenn Sie noch nicht das FromUri
Attribut verwenden können, können Sie jedoch das Route
Attribut verwenden, wie so
[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
Policy.RemoveScheduledPriorAddressItem(sequence);
return RedirectToAction("Information", new { id = Policy.Id });
}
Technisch fügt dies eine neue Route, aber zumindest ist es nicht Ihre routeconfig
verunstaltet. Es setzt die Routendefinition rechts durch, wo es verwendet wird, die ich (weniger Jagd Dinge nach unten) mag.
Denken Sie daran, um Attribut-Routing zu verwenden, dies in Ihrer routeconfig Datei muss oben Ihre definierten Routen:
routes.MapMvcAttributeRoutes();