Uwe*_*eim 5 .net c# asp.net asp.net-mvc asp.net-mvc-4
知道了RedirectToAction,我正在寻找类似的东西,以保持用户的URL稳定,并仍然将责任从一个动作传递到另一个动作.
由于我在这个主题上找到了零搜索结果,我不妨完全尝试解决XY问题.
不过,我会试着解释为什么我认为可能需要这个.
场景:
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);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,动作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);
}
Run Code Online (Sandbox Code Playgroud)
这将按预期工作.
尽管如此,在更复杂的场景中,我希望有一个"服务器端重定向"(也就是重写)来不时使用.
替代解决方法:
我也可以使用HttpContext.RewritePath,例如在Global.asax Application_BeginRequest中进行重写.
这让我觉得"出于MVC环境",即使它按预期工作.
我的问题:
是否有一种优雅的,MVC集成的方式做某事RewriteToAction?
更新1:
卢克评论了一个有希望的链接:
我会尝试调查,这是否符合我的需要.
怎么样
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);
}
Run Code Online (Sandbox Code Playgroud)
?