2017-04-18 59 views
5

知道RedirectToAction,我在尋找類似的東西來保持用戶的URL穩定,並將責任從一個動作傳遞到另一個動作。有沒有像「RewriteToAction」?

因爲我發現zero Google results在這個話題上,我不妨完全嘗試解決XY problem

不過,我會嘗試解釋爲什麼我認爲有可能是一個需要這一點。

場景:

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); 
} 

在上面的代碼中,動作A計算從一個整數一個GUID並將其傳遞到另一個動作。

解決方法:

我可以在上面的代碼更改爲類似這樣:

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); 
} 

這將正常工作。

不過,在更復雜的情況,我很想有一個「服務器端重定向」(又名重寫)現在,然後利用一切。

替代的解決方法:

我還可以使用HttpContext.RewritePath,例如在Global.asax的Application_BeginRequest裏面做一個重寫。

這種感覺對我來說「走出MVC上下文」,即使它按預期工作。

我的問題:

有沒有做這樣的事情RewriteToAction的優雅,MVC集成的方法是什麼?

更新1:

Luke commented一個有前途的鏈接:

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

我會盡力調查,這是否符合我的需要。

+2

我不認爲這會滿足您的要求? http://stackoverflow.com/a/1180744/894792或http://stackoverflow.com/a/1242525/894792 – Luke

+0

這看起來非常有前途,@Luke,我就來看看,非常感謝。 –

+1

祝你好運我的朋友! :o) – Luke

回答

2

如何

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

只需調用操作方法即可。那看起來很整齊。謝謝! –

+1

不客氣。如果它適合你,你能接受答案嗎?謝謝 –

+0

當然!我會嘗試再等幾天,以獲得另一個反饋。 –