C# 控制器如何从浏览器中点击,即使它是一个类
我是MVC的初学者,今天我正在通过以下教程使用MVC创建一个简单的应用程序。然后我检查了一下,并没有了解到控制器是如何直接从web浏览器中点击的,即使它是类。可能是我错了,或者是因为缺乏知识,我不知道背后的场景。请专家们解释一下为什么会这样 有什么想法吗 更新:: 我发现 控制器是在视图和模型之间执行链接的类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反射完成的 你可以看到血淋淋的
来自。,因为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 }
);