2017-04-18 2 views
5

Wissen RedirectToAction, ich suchte nach etwas Ähnlichem, um die URL für den Benutzer stabil zu halten und die Verantwortung immer noch von einer Aktion zur anderen zu übertragen.Gibt es etwas wie "RewriteToAction"?

Seit ich zero Google results zu diesem Thema gefunden habe, könnte ich auch versuchen, ein XY problem vollständig zu lösen.

Dennoch werde ich versuchen zu erklären, warum ich glaube, dass es ein Bedürfnis dafür geben könnte.

Szenario:

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 

    // This compiles. 
    return RedirectToAction("B", new { uniqueID }); 

    // This does not compile. 
    return RewriteToAction("B", new { uniqueID }); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

In obigem Code berechnete Aktion A ein aus einer ganzen Zahl GUID- und übergibt sie an einem anderen Aktion.

Umgehung:

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 
    var model = DoCreateModelForUnique(uniqueID); 

    return View("B", model); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

Dies würde wie erwartet:

ich den obigen Code zu so etwas wie dies ändern könnte.

Noch in komplexeren Szenarien würde ich gerne eine "serverseitige Redirect" (aka Neuschreiben) haben, um hin und wieder zu verwenden.

Alternative Abhilfe:

Ich könnte auch HttpContext.RewritePath verwenden, z.B. innerhalb von Global.asax Application_BeginRequest, um eine Neuschreibung zu machen.

Das fühlt sich für mich "außerhalb des MVC-Kontexts" an, obwohl es wie erwartet funktioniert.

Meine Frage:

Gibt es eine elegante, MVC integriert Weise so etwas wie RewriteToAction zu tun?

Update 1:

Luke commented eine viel versprechende Verbindung:

How to simulate Server.Transfer in ASP.NET MVC?

Ich werde zu untersuchen versuchen, ob dies meine Bedürfnisse passt.

+2

Ich nehme nicht an, dass dies Ihre Anforderungen erfüllen würde? http://StackOverflow.com/a/1180744/894792 oder http://StackOverflow.com/A/1242525/894792 – Luke

+0

Das sieht sehr vielversprechend aus, @Luke, ich werde einen Blick darauf werfen, vielen Dank. –

+1

Viel Glück mein Freund! : o) – Luke

Antwort

2

Wie wäre es

public ActionResult A(int id) 
{ 
    var uniqueID = CalculateUniqueFromId(id); 

    return B(uniqueID); 
} 

public ActionResult B(Guid uniqueID) 
{ 
    var model = DoCreateModelForUnique(uniqueID); 
    return View("B", model); 
} 

?

+0

Einfach die Aktionsmethode aufrufen. Das sieht ordentlich aus. Vielen Dank! –

+1

Gern geschehen. Wenn es für Sie funktioniert, können Sie die Antwort bitte akzeptieren? Danke –

+0

Sicher! Ich werde versuchen, noch ein paar Tage zu warten, um ein weiteres Feedback zu bekommen. –