ASP.NET MVC – 路由

ASP.NET MVC – 路由


路由是将 HTTP 请求定向到控制器的过程,此处理的功能在 System.Web.Routing 中实现。此程序集不是 ASP.NET MVC 的一部分。它实际上是 ASP.NET 运行时的一部分,它作为 .NET 3.5 SP1 与 ASP.NET 一起正式发布。

System.Web.Routing由 MVC 框架使用,但它也由 ASP.NET 动态数据使用。MVC 框架利用路由将请求定向到控制器。Global.asax 文件是应用程序的一部分,您将在其中定义应用程序的路由。

这是来自我们在上一章中创建的 MVC 应用程序的 Global.asax 中的应用程序启动事件的代码。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCFirstApp {
   public class MvcApplication : System.Web.HttpApplication {
      protected void Application_Start(){
         AreaRegistration.RegisterAllAreas();
         RouteConfig.RegisterRoutes(RouteTable.Routes);
      }
   }
}

下面是 RouteConfig 类的实现,它包含一个方法 RegisterRoutes。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCFirstApp {
   public class RouteConfig {
      public static void RegisterRoutes(RouteCollection routes){
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
         routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new{ controller = "Home", action = "Index", id = UrlParameter.Optional});
      }
   }
}

您将定义路由,这些路由会将 URL 映射到特定的控制器操作。动作只是控制器上的一个方法。它还可以从该 URL 中挑选参数并将它们作为参数传递到方法中。

所以这个在应用中定义的路由就是默认路由。如上代码所示,当你看到一个URL以(something)/(something)/(something)的形式到达时,那么第一块是控制器名称,第二块是动作名称,第三块是一个 ID 参数。

了解路线

MVC 应用程序使用 ASP.NET 路由系统,该系统决定 URL 如何映射到控制器和操作。

当 Visual Studio 创建 MVC 项目时,它会添加一些默认路由来让我们开始。当您运行您的应用程序时,您将看到 Visual Studio 已将浏览器定向到端口 63664。您几乎肯定会在浏览器请求的 URL 中看到不同的端口号,因为 Visual Studio 在创建项目时分配了一个随机端口。

本地主机主页

在上一个示例中,我们添加了一个 HomeController,因此您还可以请求以下任何 URL,它们将被定向到 HomeController 上的 Index 操作。

http://localhost:63664/Home/

http://localhost:63664/Home/Index

当浏览器请求 http://mysite/ 或 http://mysite/Home 时,它​​会从 HomeController 的 Index 方法获取输出。

您也可以通过更改浏览器中的 URL 来尝试此操作。在此示例中,它是 http://localhost:63664/,但端口可能不同。

如果您将 /Home 或 /Home/Index 附加到 URL 并按“Enter”按钮,您将看到来自 MVC 应用程序的相同结果。

本地主机主页索引

正如您在本例中看到的,约定是我们有一个名为 HomeController 的控制器,这个 HomeController 将成为我们 MVC 应用程序的起点。

Visual Studio 为新项目创建的默认路由假定您将遵循此约定。但是,如果您想遵循自己的约定,则需要修改路由。

自定义约定

您当然可以添加自己的路线。如果您不喜欢这些操作名称,如果您有不同的 ID 参数,或者您的站点通常具有不同的 URL 结构,那么您可以添加自己的路由条目。

我们来看一个简单的例子。考虑我们有一个包含进程列表的页面。以下是代码,它将路由到流程页面。

routes.MapRoute(
   "Process",
   "Process/{action}/{id}",
   defaults: new{
      controller = "Process", action = "List ", id = UrlParameter.Optional}
);

当有人进来寻找带有 Process/Action/Id 的 URL 时,他们将转到 Process Controller。我们可以让动作有点不同,默认动作,我们可以把它变成一个列表而不是索引。

现在到达的请求看起来像 localhosts/process。路由引擎将使用此路由配置来传递它,因此它将使用 List 的默认操作。

以下是完整的类实现。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCFirstApp{
   public class RouteConfig{
      public static void RegisterRoutes(RouteCollection routes){
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
			
         routes.MapRoute(
            "Process", "Process/{action}/{id}",
            defaults: new{
               controller = " Process", action = "List ", id =
               UrlParameter.Optional});
					
         routes.MapRoute(
            name: "Default", url: "{controller}/{action}/{id}",
            defaults: new{
               controller = "Home", action = "Index", id =
               UrlParameter.Optional});
      }
   }
}

第 1 步– 运行此程序并使用以下 URL http://localhost:63664/Process请求流程页面

本地主机进程

您将看到 HTTP 404,因为路由引擎正在寻找 ProcessController,但它不可用。

第 2 步– 通过右键单击解决方案资源管理器中的 Controllers 文件夹并选择添加 → 控制器来创建 ProcessController。

创建进程控制器

它将显示“添加脚手架”对话框。

ProcessController 脚手架对话框

步骤 3 – 选择 MVC 5 Controller – Empty 选项,然后单击“添加”按钮。

将出现添加控制器对话框。

空选项添加按钮

第 4 步– 将名称设置为 ProcessController 并单击“添加”按钮。

现在,您将在 Controllers 文件夹中看到一个新的 C# 文件 ProcessController.cs,该文件夹也已打开以在 Visual Studio 中进行编辑。

设置进程控制器

现在我们的默认操作将是 List,所以我们希望这里有一个 List 操作而不是 Index。

第 5 步– 将返回类型从 ActionResult 更改为字符串,并使用以下代码从此操作方法返回一些字符串。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCFirstApp.Controllers{
   public class ProcessController : Controller{
      // GET: Process
      public string List(){
         return "This is Process page";
      }
   }
}

步骤 6 – 当您运行此应用程序时,您将再次看到默认路由的结果。当您指定以下 URL http://localhost:63664/Process/List 时,您将看到来自 ProcessController 的结果。

本地主机进程列表

觉得文章有用?

点个广告表达一下你的爱意吧 !😁