📜  ASP.NET MVC-路由(1)

📅  最后修改于: 2023-12-03 14:39:22.545000             🧑  作者: Mango

ASP.NET MVC-路由

在ASP.NET MVC中,路由允许我们将URL映射到控制器的不同操作。这使得网站的导航和URL结构更加可读且友好。本文将介绍ASP.NET MVC路由的基础知识和常见的用法。

基础知识

在ASP.NET MVC中,路由配置是在应用程序启动时完成的。这通常是在Global.asax.cs文件中的Application_Start方法中完成的。以下是一个基本的路由示例:

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

该路由将匹配以下格式的URL:

/ControllerName/ActionName/ID

其中,ControllerName是控制器名称,ActionName是控制器中的操作名称,ID是一个可选的参数。如果不提供ID,则默认为UrlParameter.Optional

通过这种路由配置,我们可以使用以下URL访问具有“Home”控制器的“Index”操作:

/Home/Index

当然,我们也可以定义其他路由来匹配不同的URL格式。例如:

routes.MapRoute(
    name: "Product",
    url: "Product/{productName}",
    defaults: new { controller = "Product", action = "Details", productName = "" }
);

这将匹配以下格式的URL:

/Product/ProductName

并将请求路由到Product控制器的Details操作。可以看到,productName是一个路由参数,可以在控制器中访问。

常见用法
属性路由

属性路由允许我们在控制器操作上使用属性来定义路由。例如:

[Route("users/{id:int}")]
public ActionResult Details(int id) { ... }

在这个例子中,路由将匹配以下格式的URL:

/users/123

其中,123将与id参数匹配,并将传递到操作中。

区域路由

区域允许我们将控制器分组,以便更好地组织我们的代码和URL。例如:

context.MapRoute(
    "Admin_default",
    "admin/{controller}/{action}/{id}"
);

在这个例子中,Admin是一个区域名称,该区域将为所有匹配/admin URL的请求提供服务。这使得我们可以更好地组织和管理应用程序的不同部分。

约束

约束允许我们对路由参数进行更精确的控制。例如:

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new { controller = "Product", action = "Details" },
    new { productId = @"\d+" }
);

这将匹配/Product/123格式的URL,并将要求productId参数必须是数字。在该路由中,\d+是一个正则表达式,用于指定productId参数的约束条件。

结论

路由是ASP.NET MVC中非常重要的一部分,它允许我们将URL映射到应用程序中的不同部分。通过理解基本的路由知识和常见用法,我们可以更好地组织和管理我们的代码和URL结构。