传统的路由默认值意味着我们能够访问这些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 ...
}
这适用于所有三种不同的路线。
题
这个问题当然必然受到影响 应用默认动作 默认控制器和操作。就是这样 我想知道这是否是唯一的方法呢? 有没有更简洁的代码方式让它按预期工作?
是的,对..你有什么办法在这里做...
我在这里修改了一下代码:
[RoutePrefix("Home")]
[Route("{action}")]
public class HomeController
{
[Route("~/")] // GET /
[Route] // GET /Home
[Route("Index")] // GET /Home/Index
public ActionResult Index() {}
public ActionResult ...
}
一些细节:
1.您的第一个案例与传统路由不完全相同,因为在这种情况下您有一个文字段 Home
这与传统的路由选择不同 {controller}/{action}/{id} and controller = Home, action=Index,id=optional
。
如果a,你的第二个案例是按设计预期的 Route
属性用于操作,Controller上的属性不生效。
是的,对..你有什么办法在这里做...
我在这里修改了一下代码:
[RoutePrefix("Home")]
[Route("{action}")]
public class HomeController
{
[Route("~/")] // GET /
[Route] // GET /Home
[Route("Index")] // GET /Home/Index
public ActionResult Index() {}
public ActionResult ...
}
一些细节:
1.您的第一个案例与传统路由不完全相同,因为在这种情况下您有一个文字段 Home
这与传统的路由选择不同 {controller}/{action}/{id} and controller = Home, action=Index,id=optional
。
如果a,你的第二个案例是按设计预期的 Route
属性用于操作,Controller上的属性不生效。
现在对于搜索引擎优化你应该使用规范网址,这意味着单个网址是这样的
public class HomeController
{
[Route("~/")] // GET /
public ActionResult Index() {}
public ActionResult ...
}
所以家庭控制器只能在root用户访问