了解RedirectToAction
,我正在寻找类似的东西,以保持用户的网站稳定,并仍然将责任从一个操作转移到另一个操作。
由于我在此主题上找到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环境”,即使它按预期工作。
我的问题:
是否有一种优雅的,MVC集成的方式来执行RewriteToAction
更新1:
Luke commented一个有希望的链接:
我会尝试调查,这是否符合我的需要。
答案 0 :(得分: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);
}