2013-03-20 67 views
0

我有一个问题,我一直在想。路由/解决asp.net mvc

当我在浏览器中输入URL并在相应控制器中的代码实际执行时单击Enter键时会发生什么?

比方说,我有一个asp.net MVC应用程序和一个简单的控制器是这样的:

public class HomeController : Controller 
{ 
    public ActionResult About(int id = 25) 
    { 
    //code 
    } 
} 

所以,如果我进入像myUrl/home/about?id=56该控制器被调用。我知道有一个路由模式,如默认声明的{controller}/{action}/{id}。但是如果一个URL匹配那个模式就是一个创建的控制器实例,或者会发生什么?是否有一些Resolver类或类似的?有没有像列表包含所有的控制器,所以在网址中的“首页”匹配HomeController

我知道控制器签名中的id参数将通过模型绑定绑定到请求上下文中相应的id值。但是这里一定有很多其他的魔术发生。

希望有人能帮助一个新鲜的困惑asp.net的MVC用户

回答

0

一言以蔽之:

  1. DefaultControllerFactory的发现和使用反射通过其名称实例化控制器(more info
  2. ControllerActionInvoker的发现和通过名称使用反射调用动作(more info

良好的总体描述可以找到here