【发布时间】:2013-12-29 14:37:17
【问题描述】:
传统的路由默认设置意味着我们能够访问这些 URL 并且总是以相同的操作结束:
/
/Home
/Home/Index
但今天我们会用以下几行来写一些东西:
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class HomeController
{
public ActionResult Index() {}
public ActionResult ...
}
但是这个路由定义绝不相同。
/ (fails)
/Home (works)
/Home/Index (works)
所以如果我们再把上面的代码改成
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class HomeController
{
[Route("~/")]
public ActionResult Index() {}
public ActionResult ...
}
然后我们把处理颠倒过来:
/ (works)
/Home (fails)
/Home/Index (fails)
我们可以通过以下方式使声明性代码更冗长,并使其像老式路由机制一样工作:
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class HomeController
{
[Route("~/")]
[Route("~/Home")]
[Route("~/Home/Index")]
public ActionResult Index() {}
public ActionResult ...
}
这适用于所有三种不同的路线。
问题
这个问题当然与默认控制器和操作的应用程序默认操作有关。只是 我想知道这是否是唯一的方法? 有没有更简洁的代码方法让它按预期工作?
【问题讨论】:
标签: asp.net-mvc-routing asp.net-mvc-5 attributerouting