有没有像"RewriteToAction"这样的东西?

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:

卢克评论了一个有希望的链接:

如何在ASP.NET MVC中模拟Server.Transfer?

我会尝试调查,这是否符合我的需要.

NP3*_*NP3 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);
}
Run Code Online (Sandbox Code Playgroud)