Ich habe folgende Fall, wo ichasp.net mvc - Weg für String oder int (dh/Typ/23 oder/Typ/Hüte)
'/type/view/23' or '/type/view/hats'
folgende router annehmen möchten, wo 23 die Id für Hüte.
Der Controller sieht wie folgt aus:
public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(int id)
{
...
}
}
Nun, wenn sie in 23 ohne Probleme passieren. Wenn sie Hüte weitergeben, habe ich etwas zu tun. Jetzt frage ich mich in diesem Fall würde ich Hüte auf 23 übersetzen mit einem ActionFilter, der aussieht, ob der Wert übergeben als die ID ist ein int (wenn ja, überprüfen Sie, ob es in der Datenbank existiert) oder wenn es eine Zeichenfolge aussieht up die Datenbank für was die ID der Zeichenfolge, die übergeben wurde, ist. In jedem Fall würde ich, wenn eine Übereinstimmung nicht gefunden wird, den Benutzer zu einer anderen Aktion umleiten.
Erstens ist der Ansatz, den ich richtig benannt habe, zweitens ist es möglich, eine Umleitung von innerhalb eines ActionFilter durchzuführen.
Prost Anthony
Nachdenken über einen Weg für den Rahmen zu finden, um die Arbeit zu tun, könnte ich zwei Router wie folgt aus: this._Routes.MapRoute („TypeInt“ , "type/view/{id}", neu {controller = "Type", action = "ViewInt"}, neu {page = @ "^ \ d + $"}); this._Routes.MapRoute ("TypString", "type/view/{id}", neu {controller = "Type", action = "ViewString"}); Würde es sich lohnen, dies zu tun ?? oder denkst du, versuch es einfach? –
Ich sehe nicht, was Sie gewinnen, indem Sie der Routing-Infrastruktur Komplikationen hinzufügen, außer dass es das Parsing für Sie durchführt. Ich bin nicht schlau genug zu wissen, ob es funktionieren würde, ohne es tatsächlich zu testen.Persönlich würde ich wahrscheinlich zwei verschiedene Aktionen haben View und ViewByName, die beide die gleiche private Methode verwenden, um die Daten zu generieren, sobald das richtige Produkt gefunden wurde. Für mich wäre das noch einfacher und klarer. – tvanfosson