C# 控制器如何从浏览器中点击,即使它是一个类

C# 控制器如何从浏览器中点击,即使它是一个类,c#,asp.net,asp.net-mvc,class,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Class,Asp.net Mvc 4,我是MVC的初学者,今天我正在通过以下教程使用MVC创建一个简单的应用程序。然后我检查了一下,并没有了解到控制器是如何直接从web浏览器中点击的,即使它是类。可能是我错了,或者是因为缺乏知识,我不知道背后的场景。请专家们解释一下为什么会这样 有什么想法吗 更新:: 我发现 控制器是在视图和模型之间执行链接的类 来自。,因为ASP.NET MVC处理程序使用反射实例化控制器(取决于路由配置)。一旦实例化,处理程序将使用参数(如果有)调用操作方法 这一切都是使用.NET反射完成的 你可以看到血淋淋的

我是MVC的初学者,今天我正在通过以下教程使用MVC创建一个简单的应用程序。然后我检查了一下,并没有了解到控制器是如何直接从web浏览器中点击的,即使它是类。可能是我错了,或者是因为缺乏知识,我不知道背后的场景。请专家们解释一下为什么会这样

有什么想法吗

更新::

我发现

控制器是在视图和模型之间执行链接的类


来自。

,因为ASP.NET MVC处理程序使用反射实例化
控制器(取决于路由配置)。一旦实例化,处理程序将使用参数(如果有)调用
操作
方法

这一切都是使用.NET反射完成的

你可以看到血淋淋的细节


请参见如何创建MVC的基本版本(玩具版)

简而言之,当客户端请求页面时,会向服务器发送http请求。然后,通过一些检查接收此请求的服务器会发现请求的url是针对mvc应用程序的,驻留在IIS中的一些模块会处理此url,并生成控制器类的实例并调用相应的方法

更正式地说

对基于ASP.NET MVC的Web应用程序的请求首先通过 UrlRoutingModule对象,它是一个HTTP模块。本模块 解析请求并执行路由选择。UrlRoutingModule 对象选择与当前路由匹配的第一个路由对象 要求(route对象是实现RouteBase的类,是 通常是Route类的实例。)如果没有匹配的路由,则 UrlRoutingModule对象不执行任何操作,并允许请求回退到 常规ASP.NET或IIS请求处理。从所选路线 对象,UrlRoutingModule对象获取实现 与路由关联的IRoutHandler接口和 对象通常,在MVC应用程序中,这将是 MvcRouteHandler类。MvcRouteHandler实例创建一个 实现IHttpHandler接口的MvcHandler对象。这个 MvcHandler对象然后选择最终将 处理请求。有关详细信息,请参见ASP.NET路由

如你所知

我发现一幅描绘上述情况的好照片如下:


您需要首先回顾路由是如何工作的。这就是一切开始的地方

最终,ASP.NET MVC框架决定根据哪个控制器/视图进行调度:

  • 路由配置(在较旧MVC的global.asax.cs中找到,或在较新MVC的App_Start\RouteConfig.cs中找到)。这些是路由引擎的规则
  • 约定-在(1)中的“约定规则”中,当URL与规则匹配时,引擎将其分派给类和方法。示例:/Foo/Bar/42通过模式映射到FooController.Bar(Id:42)操作方法。下面请注意模式中的3个变量(控制器、操作和id)

  • 该映射是通过运行时反射动态实现的

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );