有没有像“RewriteToAction”这样的东西?

时间:2017-04-18 08:25:36

标签: c# asp.net .net asp.net-mvc asp.net-mvc-4

了解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一个有希望的链接:

  

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

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

1 个答案:

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