7 .net core 路由

路由功能负责将传入请求映射到路由处理程序

URL 匹配

URL 匹配过程
1.请求将进入 RouterMiddleware
2.路由中间件具有IRouter 列表
3.路由中间件循环调用每个IRouter 的RouteAsync方法
4.如果RouteAsync方法设置了RouteContext.Handler,那么匹配结束,往下执行,否则回到步骤3
5.路由中间件调用RouteContext.Handler

添加路由到路由中间件

路由提供 Route 类,作为 IRouter 的标准实现。 Route 的 RouteAsync 方法使用 route template 语法来进行 url 匹配。
以下两个示例可创建等效路由:

routes.MapRoute(
    name: "default_route",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "Home", action = "Index" });

routes.MapRoute(
    name: "default_route",
    template: "{controller=Home}/{action=Index}/{id?}");

此示例可添加路由约束和数据令牌:

routes.MapRoute(
    name: "us_english_products",
    template: "en-US/Products/{id}",
    defaults: new { controller = "Products", action = "Details" },
    // 约束 Id 的数据类型
    constraints: new { id = new IntRouteConstraint() },
    dataTokens: new { locale = "en-US" });

如下请求示例:
在这里插入图片描述

使用路由中间件

添加 NuGet 包“Microsoft.AspNetCore.Routing”。
注册服务

public void ConfigureServices(IServiceCollection services){
    services.AddRouting();
}

添加中间件

public void Configure (IApplicationBuilder app, ILoggerFactory loggerFactory) {
    // IRouteHandler 路由处理器,其功能是根据 路由数据 设置请求委托
    // RouteHandler 其只包含一个请求委托,无论什么 路由数据,都将设计为这个委托
    // MvcAttributeRouteHandler 则根据 路由数据 选择合适的控制器方法设置请求委托
    var trackPackageRouteHandler = new RouteHandler (context => {
        var routeValues = context.GetRouteData ().Values;
        return context.Response.WriteAsync (
            $"Hello! Route values: {string.Join(", ", routeValues)}");
    });

    // 路由生成器
    // 将多个 路由 关联到一个默认 路由处理器
    // 默认 路由处理器 为 trackPackageRouteHandler
    var routeBuilder = new RouteBuilder (app, trackPackageRouteHandler);
    
    // 向路由生成器添加路由
    // 该 路由 关联的 路由处理器 为 默认路由处理器
    routeBuilder.MapRoute (
        "Track Package Route",
        "package/{operation:regex(^(track|create|detonate)$)}/{id:int}");

    // 向路由生成器添加路由
    // 该 路由 关联的 路由处理器 为 第二个参数
    routeBuilder.MapGet ("hello/{name}", context => {
        var name = context.GetRouteValue ("name");
        return context.Response.WriteAsync ($"Hi, {name}!");
});

    // 生成最终的路由集合
    var routes = routeBuilder.Build ();
    // 向路由中间件添加路由集合
    app.UseRouter (routes);
}

框架可提供一组扩展方法,用于将路由添加到路由生成器:
MapRoute
MapGet
MapPost
MapPut
MapDelete
MapVerb

保留的路由名称

以下关键字是保留的名称,它们不能用作路由名称或参数:
action
area
controller
handler
page

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值