route-routepattern

本文深入探讨了Microsoft.AspNetCore.Routing.Patterns.RoutePattern的使用方法,包括如何通过RoutePatternFactory生成实例,解析路由模板,设置参数策略及优先级,以及如何获取路径段、参数描述和所需值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

routepattern-路由模式:通过解析路由模板生成

Microsoft.AspNetCore.Routing.Patterns.RoutePattern instances. Instances
    //     of Microsoft.AspNetCore.Routing.Patterns.RoutePattern are immutable.
    [DebuggerDisplay("{DebuggerToString()}")]
    public sealed class RoutePattern
    {
        
        public static readonly object RequiredValueAny;
		//针对当前路由的优先级
        public decimal InboundPrecedence { get; }

        public decimal OutboundPrecedence { get; }
        //每个路由参数的参数策略保存到这里
        public IReadOnlyDictionary<string, IReadOnlyList<RoutePatternParameterPolicyReference>> ParameterPolicies { get; }
		//返回RoutePatternParameterPart列表:对所有路由参数的描述
        public IReadOnlyList<RoutePatternParameterPart> Parameters { get; }
        //
        // Summary:
        //     Gets the list of path segments.
        public IReadOnlyList<RoutePatternPathSegment> PathSegments { get; }
        //
        // Summary:
        //     Gets the raw text supplied when parsing the route pattern. May be null.
        public string RawText { get; }
        //指定路由参数值
        public IReadOnlyDictionary<string, object> RequiredValues { get; }

        //通过指定参数的名称得到对应的RoutePatternParameterPart
        public RoutePatternParameterPart GetParameter(string name);
    }
}

通过RoutePatternFactory生成RoutePattern对象
建立format方法

public static string Format(RoutePattern pattern)
        {
            var builder = new StringBuilder();
            builder.AppendLine($"RawText:{pattern.RawText}");
            builder.AppendLine($"InboundPrecedence:{pattern.InboundPrecedence}");
            builder.AppendLine($"OutboundPrecedence:{pattern.OutboundPrecedence}");
            var segments = pattern.PathSegments;
            builder.AppendLine("segments");
            foreach(var segment in segments)
            {
                foreach(var part in segment.Parts)
                {
                    builder.AppendLine($"{part.ToString()}");
                }
            }
            builder.AppendLine("Defaults");
            foreach(var @default in pattern.Defaults)
            {
                builder.AppendLine($"{@default.Key}={@default.Value}");
            }
            builder.AppendLine("ParameterPolicy ");
            foreach(var policy in pattern.ParameterPolicies)
            {
                builder.AppendLine($"{policy.Key}={string.Join(',',policy.Value.Select(it=>it.Content))}");
            }
            builder.AppendLine("RequiredValues");
            foreach(var required in pattern.RequiredValues)
            {
                builder.AppendLine($"{required.Key}={required.Value}");
            }
            return builder.ToString();
        }

生成路由模板并打印各项值

public IActionResult s13()
        {
            var template = "{fruit}/{days}";
            var pat = RoutePatternFactory.Parse(
                pattern:template,
                defaults:null,
                parameterPolicies:null,
                requiredValues:new { fruit= "010", days = 3}
                );
            return Json(Format(pat));
        }

结果

"RawText:{city}/{days}\r\nInboundPrecedence:1.1\r\nOutboundPrecedence:3.3\r\nsegments\r\nMicrosoft.AspNetCore.Routing.Patterns.RoutePatternParameterPart\r\nMicrosoft.AspNetCore.Routing.Patterns.RoutePatternParameterPart\r\nDefaults\r\nParameterPolicy \r\nRequiredValues\r\ncity=010\r\ndays=3\r\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值