Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 为什么强制性是“强制性”呢;路线;自定义路由控制器的方法上的属性?_Asp.net Core_Asp.net Core Mvc_Asp.net Mvc Routing - Fatal编程技术网

Asp.net core 为什么强制性是“强制性”呢;路线;自定义路由控制器的方法上的属性?

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

考虑通过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>
据我所知,通过使用
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();
    }
}