路径 Asp.net - Asp.net Core

路径是干什么的?

在 ASP.NET MVC 中,路径(Route)是用于将传入的 HTTP 请求映射到相应的控制器动作方法的机制。路径定义了 URL 的模式,并且确定了如何解析 URL,并将其与控制器中的操作关联起来。

路径在 ASP.NET MVC 中的作用包括以下几个方面:

  1. URL 路由: 路径用于定义 URL 的模式,指定了不同 URL 请求应该由哪个控制器的哪个动作方法来处理。

  2. 路由参数: 路径可以包含占位符,这些占位符可以作为路由参数来获取并传递给控制器动作方法。例如,{controller}/{action}/{id} 中的 id 就是一个路由参数。

  3. RESTful 风格: 路径可以用于创建符合 RESTful 风格的 URL 结构,使得 URL 更具可读性和可理解性。

  4. 自定义路由规则: ASP.NET MVC 允许定义自定义的路由规则,通过路由配置来自定义 URL 的结构和路由规则,以适应特定的业务需求。

  5. 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 方法内配置路由规则:

  1. 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?} 是路由模板中的占位符。

  1. 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 文件中配置路由规则:

  1. 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 参数指定了默认的控制器、动作方法和可选参数。

  1. 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 中,使用 AddControllersWithViewsAddControllers 方法来启用属性路由。

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 的路由配置方法:

  1. 在控制器和动作方法上使用特性路由: 在控制器和动作方法上使用特性路由标记(Attribute Routing)。

示例:

public class HomeController : Controller
{
    [Route("myroute")]
    public ActionResult Index()
    {
        // ...
    }
}
  1. 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() 方法用于启用特性路由,这样控制器和动作方法上使用的特性路由标记才能生效。

  1. 全局配置:Application_Start 方法中注册路由配置。

示例:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

以上是传统 ASP.NET MVC 中启用和配置特性路由的基本方法。特性路由使得路由配置更加直观和灵活,但需要注意,在传统 ASP.NET MVC 中,特性路由不是默认启用的,需要使用 MapMvcAttributeRoutes() 来启用对特性路由的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值