Rob*_*nik 12 asp.net-mvc-routing attributerouting asp.net-mvc-5
传统的路由默认值意味着我们能够访问这些URL并始终以相同的操作结束:
/
/Home
/Home/Index
Run Code Online (Sandbox Code Playgroud)
但今天我们将在这些方面写一些东西:
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class HomeController
{
public ActionResult Index() {}
public ActionResult ...
}
Run Code Online (Sandbox Code Playgroud)
但是这种路由定义绝不相同.
/ (fails)
/Home (works)
/Home/Index (works)
Run Code Online (Sandbox Code Playgroud)
因此,如果我们将上层代码更改为
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class HomeController
{
[Route("~/")]
public ActionResult Index() {}
public ActionResult ...
}
Run Code Online (Sandbox Code Playgroud)
但随后我们将处理工作颠倒过来:
/ (works)
/Home (fails)
/Home/Index (fails)
Run Code Online (Sandbox Code Playgroud)
我们可以使声明性代码更加冗长,并通过以下方式使其成为旧式路由机制:
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class HomeController
{
[Route("~/")]
[Route("~/Home")]
[Route("~/Home/Index")]
public ActionResult Index() {}
public ActionResult ...
}
Run Code Online (Sandbox Code Playgroud)
这适用于所有三种不同的路线.
此问题当然绑定到默认控制器和操作的应用程序默认操作.只是我想知道这是否是唯一的方法呢?有没有更简洁的代码方式让它按预期工作?
Kir*_*lla 12
是的,对..你有什么办法在这里做...
我在这里修改了一下代码:
[RoutePrefix("Home")]
[Route("{action}")]
public class HomeController
{
[Route("~/")] // GET /
[Route] // GET /Home
[Route("Index")] // GET /Home/Index
public ActionResult Index() {}
public ActionResult ...
}
Run Code Online (Sandbox Code Playgroud)
一些细节:
1.您的第一个案例与传统路由不完全相同,因为在这种情况下,您有一个文字段Home,它与传统路由选项不同{controller}/{action}/{id} and controller = Home, action=Index,id=optional.
2.如果Route在操作中使用属性,Controller上的属性不生效,则第二种情况应按设计进行.
| 归档时间: |
|
| 查看次数: |
6129 次 |
| 最近记录: |