【发布时间】:2018-10-23 17:08:10
【问题描述】:
考虑一个通过 Visual Studio 2017 模板创建的全新 Asp.Net Core 2.1 MVC Web 应用。现在,考虑一个自定义视图 (MyView) 和一个控制器 (ActualController),以便项目结构看起来类似于下图:
MyView 没有什么特别之处,而且离题了。但是,当用户输入http://(domain)/desired/myview 之类的 URL 或通过主页中的超链接时,该页面应该会出现:
<a asp-area="" asp-controller="Desired" asp-action="MyView">MyView</a>
现在让我们关注控制器,它是一个命名不同的类,与路由所期望的不同:
[Route("desired")]
public class ActualController : Controller
{
[Route("MyView")] //without this the method won't be called
public IActionResult MyView()
{
return this.View();
}
}
据我所知,通过使用Route 属性装饰控制器,可以告诉 URL 解析器匹配此类。但是,仅当我在目标方法/操作上显式添加(冗余)Route 属性时,映射才有效。如果我删除它,将找不到路径,并且服务器返回 404 错误。
问题是:为什么必须强制使用Route 装饰方法,即使操作是由方法名称隐式定义的(像往常一样)?
注意:重命名控制器类对我来说相当简单,但我想知道这种行为背后的原因是什么。
【问题讨论】:
标签: asp.net-core asp.net-core-mvc asp.net-mvc-routing