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