C# MVC请求处理程序

C# MVC请求处理程序,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,ASP.NET根据文件扩展名将HTTP请求映射到HTTP处理程序。我只是想知道它在MVC中是如何工作的,因为在MVC中,我们只是指向控制器内部的动作方法。我们没有指定扩展名 然后我试图从了解处理程序在MVC应用程序执行过程中的工作原理 但我还是不明白。有谁能解释一下MVC中的处理程序是如何工作的,以及它与普通ASP.NET处理程序有什么不同。不要把它弄糊涂了 所有控制器都是类 一切行动都是方法 您只是从地址栏调用方法(函数)而已 mvc处理程序检查类(控制器)中是否存在方法(ActionRsul

ASP.NET根据文件扩展名将HTTP请求映射到HTTP处理程序。我只是想知道它在MVC中是如何工作的,因为在MVC中,我们只是指向控制器内部的动作方法。我们没有指定扩展名

然后我试图从了解处理程序在MVC应用程序执行过程中的工作原理


但我还是不明白。有谁能解释一下MVC中的处理程序是如何工作的,以及它与普通ASP.NET处理程序有什么不同。

不要把它弄糊涂了

所有控制器都是类

一切行动都是方法

您只是从地址栏调用方法(函数)而已

mvc处理程序检查类(控制器)中是否存在方法(ActionRsult)
使用相同的名称和匹配的参数,这就是全部

不要太混淆它

所有控制器都是类

一切行动都是方法

您只是从地址栏调用方法(函数)而已

mvc处理程序检查类(控制器)中是否存在方法(ActionRsult)
使用相同的名称和匹配的参数,这些都是您可能混淆了术语

MVC使用路由表查找到特定视图的路由

就像你有
www.YourSite.com/index.aspx
,你也有
www.YourSite.com/Home/index

不同之处在于,
在ASP.Net中,您将直接加载.aspx文件,就像在URL中一样,
在MVC中,您将转到主控制器并查找索引操作。然后,索引操作将呈现其视图

在这里,每个视图或部分视图在控制器中都有其ActionMethod

如果没有关联的控制器和操作,则不会渲染任何视图

你可以看一看以作进一步参考

您将在Global.asax文件中拥有一个默认路由,该路由将执行此任务

如果有任何复杂的参数(具有多个参数),则需要手动将其添加到路由表中。更多关于这方面的信息,请访问链接


但愿如此。

你可能把术语弄糊涂了

MVC使用路由表查找到特定视图的路由

就像你有
www.YourSite.com/index.aspx
,你也有
www.YourSite.com/Home/index

不同之处在于,
在ASP.Net中,您将直接加载.aspx文件,就像在URL中一样,
在MVC中,您将转到主控制器并查找索引操作。然后,索引操作将呈现其视图

在这里,每个视图或部分视图在控制器中都有其ActionMethod

如果没有关联的控制器和操作,则不会渲染任何视图

你可以看一看以作进一步参考

您将在Global.asax文件中拥有一个默认路由,该路由将执行此任务

如果有任何复杂的参数(具有多个参数),则需要手动将其添加到路由表中。更多关于这方面的信息,请访问链接


希望如此。

事实上,这里的全面解释真的超出了范围,你应该阅读它以深入了解它,如果你接受建议,如果你能找到建议,一本书通常比博客等更好(根据我的经验,博客帖子可能是由任何一个可能毫无头绪的人写的)。只要确保你阅读评论,看看一本书是否好,这样你就不会被误导

无论如何,我将尝试概述基本内容,不要在细节上添加太多的杂音,因为这样做太过分了

正如其他人在回答中已经提到的,在MVC生态系统中,有一个称为路由和路由表的概念。基本上,它们是一组模式。当请求到达时,请求头包含请求的url,例如:

  • http://localhost:12345/
  • http://localhost:12345/home/index
  • http://localhost:12345/products/catalog
  • http://localhost:12345/products/details/1
  • http://localhost:12345/promotion
有一个原因,我写了不止一个,并且使用了不同的格式。让我们逐一检查它们

http://localhost:12345/
示例

第一个,
http://localhost:12345/
是最简单的方法,通常被称为默认路由。通常这指向
HomeController
中默认区域(即“无区域”)中的无参数
索引
操作方法。请注意,操作和控制器以及区域(而且,几乎所有细节)都是可配置的。您可以通过添加默认路线来实现这一点,但这通常是通过项目模板完成的。您可以在App_Start/RouteConfig文件中找到它,它有一个
名称
参数
“default”

所以,无论何时,只要有一个请求是no(让我简单地说一下)存在其他部件,它们由
HomeController
中的
Index
操作进行处理。正如您在上面的代码中所看到的,
Index
HomeController
默认值:
参数中配置,您必须在那里更改默认值。如果改用一个名为
欢迎
的操作,然后您需要将其传递给上面的方法:

defaults: new { controller = "Home", action = "Welcome", id = UrlParameter.Optional }
还要注意的是,尽管我写了“其中没有其他部分存在”,但我所说的其他部分只是指路线段——例如,查询字符串
?param1=value1
不会阻止选择此路线

http://localhost:12345/home/index
示例

这和上面的完全一样。我只是为了让你能看到这个
defaults: new { controller = "Home", action = "Welcome", id = UrlParameter.Optional }
http://localhost:12345/products   /catalog
                      {controller}/{action}/{id}
routes.MapRoute(
  name: "Promo",
  url: "promotion",
  defaults: new { controller = "Products", action = "Promotion" }
);