我在一个控制器中有 2 个动作
public ActionResult DoSomething()
{
...
}
public ActionResult SoSomethingAgain()
{
...
}
我想让两个请求都执行相同的操作。
也许是别名……
[ie. SoSomethingAgain]
public ActionResult DoSomething()
{
...
}
什么是正确的方法?
我在一个控制器中有 2 个动作
public ActionResult DoSomething()
{
...
}
public ActionResult SoSomethingAgain()
{
...
}
我想让两个请求都执行相同的操作。
也许是别名……
[ie. SoSomethingAgain]
public ActionResult DoSomething()
{
...
}
什么是正确的方法?
如果我没看错,你可以这样做:
public ActionResult DoSomething()
{
...
}
public ActionResult SoSomethingAgain()
{
return DoSomething();
}
只需SoSomethingAgain
这样做:
return DoSomething();
当您在应用程序开始时设置路由时,您唯一的其他选择是Route
为该控制器构建特定的。这将比它的价值多得多。
如果 SoSomethingAgain 是被调用的动作,那么前面的两个答案将运行 DoSomething 内部的代码,但控制器动作和上下文仍然是 SoSomethingAgain。这意味着 DoSomething 中的 return View() 语句将查找 SoSomethingAgain 视图。
同样,管道将使用在 SoSomethingAgain 上定义的过滤器,而不是在 DoSomething 上定义的过滤器。如果您在 DoSomething 上放置 [Authorize] 过滤器,您可以看到这一点。如果您点击 DoSomething 操作,系统将提示您登录,但如果您点击 SoSomethingElse 操作,则不会提示您。
也许这就是你想要的,也许不是。如果不是,并且您希望同时拥有 DoSomething url 和 SoSomethingElse url,但两者都运行相同的代码,则摆脱 SoSomethingElse 控制器操作,并添加自定义路由(在默认路由之前)。
routes.MapRoute(
name: "SoSomethingAgainRoute",
url: "{controller}/SoSomethingAgain/{id}",
defaults: new { controller = "Home", action = "DoSomething", id = UrlParameter.Optional }
);