Wenn Sie Wenn Sie mehrere optionale Parameter auf derselben Route wünschen, treten Probleme auf, da Ihre URLs immer die erste angeben müssen, um die zweite zu verwenden. Nur weil Sie Constraints verwenden, wird die Auswertung der Parameter nicht gestoppt.
dieses Nehmen Sie zum Beispiel: /videos/3
Wenn diese übereinstimmen versucht, findet es Videos und sagt: „OK, ich immer noch übereinstimmen“. Dann schaut es sich den nächsten Parameter an, der Sort ist, und er erhält den Wert 3 und vergleicht ihn dann mit der Einschränkung. Die Einschränkung schlägt fehl, und daher heißt es "OPPS, ich passe nicht zu dieser Route" und es geht weiter zur nächsten Route. Um die Seite ohne den definierten Sortierparameter festzulegen, sollten Sie stattdessen 2 Routen definieren.
//URL: /videos/rating/1
routes.MapRoute(
name: "Videos",
url: "videos/{Sort}/{Page}",
defaults: new { controller = "VideoList", action = "Index", Page = UrlParameter.Optional },
constraints: new { Sort = @"[a-zA-Z]+", Page = @"\d+"}
);
//URL: /videos/1
routes.MapRoute(
name: "Videos",
url: "videos/{Page}",
defaults: new { controller = "VideoList", action = "Index", Sort = "the actual default sort value", Page = UrlParameter.Optional },
constraints: new { Page = @"\d+"}
);
Ich habe die meisten spezifischen Routen zuerst, wenn möglich, und am Ende mit dem geringsten spezifischen, aber in diesem Fall ist die Reihenfolge aufgrund der Zwänge sollte keine Rolle spielen. Was ich unter spezifisch verstehe, sind die am meisten definierten Werte. In diesem Fall müssen Sie die Sortierung in der ersten Route definieren, und Sie können auch die Seite angeben, also ist sie spezifischer als die Route mit nur dem Seitenparameter.
Danke, das half ein paar Probleme zu klären. – Maddhacker24