Laden...

Frage Routing Name Parameter

Erstellt von mosspower vor einem Jahr Letzter Beitrag vor einem Jahr 740 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor einem Jahr
Frage Routing Name Parameter

Hallo,

ich wundere mich zwar schon ein paar Jahre, aber da ich aktuell eine neue API aufsetze, frage ich mal hier, weil ich immer noch keine Lösung finde.

Wenn ich folgende Route konfiguriere, dann ...


      app.MapControllerRoute(
        name: "api",
        pattern: "api/{culture}/{controller}/{action}/{id?}",
        constraints: new { culture = @"[a-z]{2}" });

wird der Value des Parameters nur dann gemappt, wenn er genau id lautet. Warum ist das so, bzw. kann man das so ändern, dass der Name egal ist?
Oft verwendet man intuitiv passendere Namen, wie z.B. key, articleNumber ect. ....

Ich hab da so einiges ausprobiert, aber es scheint, dass bei culture, controller, action der Name völlig egal ist, wenn keine Einschränkung in constraints vorhanden ist, nur id muss genau id als Parameter heißen, sonst wird der Wert als null übergeben.

Ist das so in Stein gemeißelt oder hab ich einfach dazu nichts gefunden?

16.834 Beiträge seit 2008
vor einem Jahr

Damit das Thema trotz Name Controller vor Ausführung / Aufruf in Filter oder Handler ändern nicht unbeantwortet bleibt:

wird der Value des Parameters nur dann gemappt, wenn er genau id lautet. Warum ist das so, bzw. kann man das so ändern, dass der Name egal ist?

Der Parameter lautet id, weil in der Route id steht. Und der Name kann nicht egal sein, weil sonst das gesamte Routing und Model Binding System nicht funktioniert.
Der HTTP Standard besagt, dass es sowohl, Route wie auch Query Parameter geben kann - und wenn es "egal" wäre, dann würde a) das Mappingsystem nicht mehr funktionieren und b) würde das Verhalten von Route- und Query Params nicht mehr funktionieren.

Ganz davon abgesehen, dass das Binder System nicht hellsehen kann.

Daher arbeitet man in ASP.NET Core auch nicht mit der Default Route (die soll wenn überhaupt nur vorhanden sein als Fallback), sondern mit Route Templates an der Action und passenden Request Models.

In Zusammenfassung der beiden Themen und der Fragen kann ich Dir wirklich nur sehr sehr empfehlen sich mal mit dem HTTP Standard und wie Routing funktioniert auseinander zu setzen.
Da scheinen echt paar sehr sehr wichtige Basics zu fehlen.