Asp.net core 为什么强制性是“强制性”呢;路线;自定义路由控制器的方法上的属性?
考虑通过Visual Studio 2017模板创建的全新Asp.Net Core 2.1 MVC Web应用程序。现在,考虑一个自定义视图(MyView)和一个控制器(实际控制器),以便项目结构看起来类似于这个图片:Asp.net core 为什么强制性是“强制性”呢;路线;自定义路由控制器的方法上的属性?,asp.net-core,asp.net-core-mvc,asp.net-mvc-routing,Asp.net Core,Asp.net Core Mvc,Asp.net Mvc Routing,考虑通过Visual Studio 2017模板创建的全新Asp.Net Core 2.1 MVC Web应用程序。现在,考虑一个自定义视图(MyView)和一个控制器(实际控制器),以便项目结构看起来类似于这个图片: MyView没有显示任何特殊内容,而且它偏离了主题。但是,当用户在主页中输入URL或通过超链接输入URL时,页面应显示: <a asp-area="" asp-controller="Desired" asp-action="MyView">MyView</a
MyView
没有显示任何特殊内容,而且它偏离了主题。但是,当用户在主页中输入URL或通过超链接输入URL时,页面应显示:
<a asp-area="" asp-controller="Desired" asp-action="MyView">MyView</a>
据我所知,通过使用Route
属性装饰控制器,告诉URL解析器匹配此类。但是,只有在目标方法/操作上显式添加(冗余)Route
属性时,映射才会起作用。如果我删除它,将找不到路径,服务器将返回404错误
问题是:为什么必须用Route
方法来修饰,即使操作是由方法名隐式定义的(通常如此)
注意:重命名控制器类对我来说相当简单,但我想知道这种行为背后的原因是什么。您正在用
[route(“desired”)]
覆盖[controller]/[action]
的默认路由。由于您没有在控制器级别定义操作参数,所有其他路由都必须显式完成
将top route参数更改为[route(“desired/[action]”)]
应该可以解决这个问题,方法名称将用作参数。如果希望通过向单个操作添加[Route(“”)
属性来对其进行不同的命名,则仍然可以覆盖单个操作
有关管线参数的详细说明,请参见
[Route("desired")]
public class ActualController : Controller
{
[Route("MyView")] //without this the method won't be called
public IActionResult MyView()
{
return this.View();
}
}