路径是干什么的?
在 ASP.NET MVC 中,路径(Route)是用于将传入的 HTTP 请求映射到相应的控制器动作方法的机制。路径定义了 URL 的模式,并且确定了如何解析 URL,并将其与控制器中的操作关联起来。
路径在 ASP.NET MVC 中的作用包括以下几个方面:
-
URL 路由: 路径用于定义 URL 的模式,指定了不同 URL 请求应该由哪个控制器的哪个动作方法来处理。
-
路由参数: 路径可以包含占位符,这些占位符可以作为路由参数来获取并传递给控制器动作方法。例如,
{controller}/{action}/{id}
中的id
就是一个路由参数。 -
RESTful 风格: 路径可以用于创建符合 RESTful 风格的 URL 结构,使得 URL 更具可读性和可理解性。
-
自定义路由规则: ASP.NET MVC 允许定义自定义的路由规则,通过路由配置来自定义 URL 的结构和路由规则,以适应特定的业务需求。
-
URL 生成: 通过路由和路由参数,ASP.NET MVC 提供了便捷的方法来生成 URL,使得在视图或代码中生成 URL 变得更加简单和灵活。
在 ASP.NET MVC 中,路由系统是整个请求处理的核心部分,它将传入的 URL 解析为对应的控制器和动作方法,从而触发相应的处理逻辑。配置良好的路由能够提供更好的可维护性和扩展性,使得应用程序的 URL 结构更加友好和易于管理。
具体到 net core 项目
在 ASP.NET Core 中,自定义路由规则可以在 Startup.cs
文件中的 Configure
方法内进行配置。通常使用 UseEndpoints
方法来配置路由规则,这是在 ASP.NET Core 中定义路由的主要位置。
在 Startup.cs
文件中的 Configure
方法内配置路由规则:
- UseEndpoints 方法: 使用
UseEndpoints
方法来配置路由规则,并指定路由规则的模板和处理控制器和动作方法的逻辑。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "customRoute",
pattern: "myroute/{controller=Home}/{action=Index}/{id?}");
});
}
在这个例子中,通过 MapControllerRoute
方法定义了一个自定义的路由规则,将 myroute
映射到控制器的默认动作方法。其中 {controller=Home}
, {action=Index}
, {id?}
是路由模板中的占位符。
- Attribute Routing: 除了
UseEndpoints
方法外,还可以使用控制器和动作方法级别的特性路由(Attribute Routing)来定义自定义的路由规则。
示例:
[Route("myroute/[controller]/[action]/{id?}")]
public class MyController : Controller
{
public IActionResult Index()
{
// 动作方法逻辑
}
}
在这个例子中,Route 特性用于指定了控制器和动作方法的路由模板,从而定义了自定义的路由规则。
无论是在 Startup.cs
中使用 UseEndpoints
方法配置路由规则,还是在控制器和动作方法上使用 Attribute Routing,都可以实现对 ASP.NET Core 应用程序的路由进行自定义规则的配置。
具体到 Asp.net mvc 项目
在传统的 ASP.NET MVC 中,可以使用 RouteConfig.cs
文件来配置路由规则。ASP.NET MVC 使用 RouteConfig
类来定义应用程序的路由规则。
在 RouteConfig.cs
文件中配置路由规则:
- RouteConfig 类: 在
App_Start
文件夹下的RouteConfig.cs
文件中,可以找到RouteConfig
类。这是用于配置路由的地方。
示例:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "CustomRoute",
url: "myroute/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
// 更多路由规则可以继续添加
}
}
在这个示例中,MapRoute
方法用于定义一个自定义的路由规则。url
参数表示路由模板,defaults
参数指定了默认的控制器、动作方法和可选参数。
- Global.asax 文件中注册路由: 在
Global.asax.cs
文件中,通过调用RouteConfig.RegisterRoutes(RouteTable.Routes);
来注册路由配置。
示例:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
// 其他启动配置
}
这样配置之后,请求将会根据定义的路由规则来寻找匹配的控制器和动作方法。在传统的 ASP.NET MVC 中,通过 RouteConfig 类来定义路由规则是一种常见的做法,可以根据业务需求添加和配置不同的路由规则。
如何激活 属性路径
具体到 net core 项目
在 ASP.NET Core 中,属性路径(Attribute Routing)是一种通过特性标记在控制器和动作方法上定义路由模板的方式。要激活属性路径,需要在 Startup.cs
文件的 ConfigureServices
方法中启用属性路由。
在 ASP.NET Core 中,使用 AddControllersWithViews
或 AddControllers
方法来启用属性路由。
在 Startup.cs
文件中启用属性路径:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(options =>
{
options.EnableEndpointRouting = false; // 禁用终结点路由
})
.AddMvcOptions(options =>
{
options.EnableEndpointRouting = false; // 禁用终结点路由
});
// 其他服务配置
}
要启用属性路径,需要将 EnableEndpointRouting
设置为 false
,这样可以禁用终结点路由(Endpoint Routing),从而使用传统的 MVC 路由。属性路径和传统的路由可以同时使用,但为了在 ASP.NET Core 中启用属性路径,需要禁用终结点路由。
在 Startup.cs
文件中的 Configure
方法中,可以添加属性路由的配置,比如在控制器和动作方法上使用 [Route]
特性定义路由模板。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 省略其他配置
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// 其他中间件配置
}
这样配置之后,控制器和动作方法上的 [Route]
特性会生效,并且可以使用属性路径来定义自定义的路由模板。
具体到 Asp.net mvc 项目
针对传统 ASP.NET MVC 的路由配置方法:
- 在控制器和动作方法上使用特性路由: 在控制器和动作方法上使用特性路由标记(Attribute Routing)。
示例:
public class HomeController : Controller
{
[Route("myroute")]
public ActionResult Index()
{
// ...
}
}
- RouteConfig.cs 文件中配置默认路由和属性路由: 在
RouteConfig.cs
文件中注册路由,并且添加对特性路由的支持。
示例:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); // 启用特性路由
// 默认路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
在这个示例中,MapMvcAttributeRoutes()
方法用于启用特性路由,这样控制器和动作方法上使用的特性路由标记才能生效。
- 全局配置: 在
Application_Start
方法中注册路由配置。
示例:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
以上是传统 ASP.NET MVC 中启用和配置特性路由的基本方法。特性路由使得路由配置更加直观和灵活,但需要注意,在传统 ASP.NET MVC 中,特性路由不是默认启用的,需要使用 MapMvcAttributeRoutes()
来启用对特性路由的支持。