其中 public ActionResult Index()这个方法称为 Controller 的 Action,他返回的是 ActionResult 的类型。一个
Controller 可以有很多个 Action。
那么一个 URL 是怎样被定位到 Controller 中来的呢?我们先来看一下 web.config 文件,在 web.config 文件的
httpModules 配置节中,我们可以看到一个 UrlRoutingModule:
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.
5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
就是这个 UrlRoutingModule 来把 URL 定位到 Controller 中去的。而对于 URL 会被路由到哪一个 Controller 中
去,这些我们是完全可以自己定义的。我们到 Global.asax 文件去看一下:
我们可以看到这里定义了一个名为"Default"的 Route,还定义了默认的参数。默认参数的意义在于,当我们
访问例如 http://localhost:2176/的 URL 的时候,他会将不存在的参数用默认的参数补上,也就是相当于访问
http://localhost:2176/Home/Index 一样。
注意:我们知道在 IIS 中,我们访问网站的根目录的时候,如果我们不指定要访问的路径,IIS 会自己根据在
IIS 中设置的默认文档去访问。例如我们访问 http://localhost:2176/这个 URL 的时候,IIS 会去寻找网站根目录
下的 Default.aspx 文件(假设我们设置了 IIS 的默认文档为 Default.aspx)。而在 ASP.NET MVC 中对于类似
http://localhost:2176/这样的网站根目录的路径,并不会经过 Route 的处理,所以我们看到我们建立的 ASP.NET
MVC 程序的根目录下有个 Default.aspx 文件,该文件就是用于处理前面的访问根目录的情况的。请不要删除
该文件。它会将 http://localhost:2176/Default.aspx 交由 ASP.NET MVC 来处理,具体请看 Default.aspx.cs 文件。
我们知道了一个 URL 是怎样定位到相应的 Controller 中去的了,那么 View 又是怎么被返回给客户端的呢?
我们从前面的截图中看到,Controller 中的 Action 方法中有个 return View()的方法。默认情况下它会返回与
Action 同名的 view.在 ASP.NET MVC 默认的视图引擎(WebFormViewEngine)下,view 是按如下路径访问的:
/Views/{Controller}/{Action}.aspx
也就是说对于 http://localhost:2176/Home/Index 这个路径,在默认情况下,在 Index 这个 Action 中用 return
View()来返回 view 的时候,会去寻找/Views/Home/Index.aspx 文件,如果找不到这个文件,就会去 Share 目
录中寻找:/Views/Share/Index.aspx,如果都找不到,就会抛出找不到 View 的异常。return View("lulu.aspx")来
指定要返回哪一个 view:/Views/Home/lulu.aspx。
那么为什么前面我们直接访问 Views/Home/Index.aspx 这里文件的时候会出现 404 错误,说找不到文件呢?
因为在 MVC 中,是不建议直接去访问 View 的,所以我们建立的 ASP.NET MVC 程序在默认情况下就在 Views
目录下加了一个 web.config 文件,内容如下: