MVC如何知道调用哪个控制器,当他们没有注释
本文关键字:他们 注释 控制器 何知道 调用 MVC | 更新日期: 2023-09-27 18:15:44
第一次在stackexchange上回复邮件
我的问题不是关于aspx页面,而是关于asp.net core MVC6asp.net core可以不使用aspx页面,它使用Razor页面。另一个不删除这个问题的原因是为了帮助其他像我这样的学生,他们最终遇到了我基于这门课程的相同问题,因为我后来找到了合适的词语,有各种各样的网站,人们对此感到困惑,而我则熟练于这个新概念。我希望你能保留这个问题,更多的人跟随微软的在线课程可以偶然发现这个问题,因为在视频中它不是很清楚。(影片中讨论了很多事情,在所有其他解释中,这是一个相当大的问题)。
在本课程视频的某个点上,他们定义了一个响应URL的控制器。MVC以某种方式理解当你请求http://localhost/Scott
时,它应该调用ScottController
,然后返回"嘿,它是scott"。
控制器是这样的:
namespace WebApplication1.Controllers // dont use controller minus S (controller) here
{
public class MariaController
{
public string Index() => "Hello from index mvc";
public string Maria() => "Hello from Maria mvc";
}
public class ScottController
{
public string index()
{
return "hey it's scott";
}
}
}
请注意,在上面的代码中没有[HttpGet("/Maria")]
或[HttpGet("/Scott")]
注释,然而不知何故,这段代码知道类ScottController
应该响应/Scott
URL,尽管它没有"name属性"或"Scott"值来检查。
它是与控制器类,名称"ScottController"被拆分和控制器被删除,所以MVc知道这是一个类,处理请求的/Scott
URI?
这完全是另一种方式,所有都与路由有关。与站点相关的URI /Scott
默认为以下路由值:
- 控制器:斯科特
- 行动:指数
这是因为约定。默认约定为/{controller}/{action}
,其中动作是可选的,默认为Index
。
所以当你请求/Scott
时,MVC的路由将去寻找一个名为ScottController
的控制器,这都是因为惯例。参见为什么MVC控制器必须有'Controller'类名的约定?
然后,由于请求uri中没有操作,它将尝试查找名为Index
的默认操作,该操作返回"嘿,它是scott"。