ASP.NET Core路由模板字符串匹配是如何通过手动档实现 route template 匹配字符串实现的

在开发ASP.NET Core应用程序时,我们经常需要处理URL路由。使用路由模板,我们可以定义特定格式的URL,并将其映射到相应的控制器和操作方法上。但是,在某些情况下,我们可能需要根据传入的URL字符串来判断匹配的是哪个路由模板,这就需要手动实现字符串的匹配过程。

使用Microsoft.AspNetCore.Routing进行字符串匹配

在ASP.NET Core中,我们可以使用Microsoft.AspNetCore.Routing命名空间中的一些类来实现字符串匹配。具体来说,我们可以使用TemplateParser、RouteValueDictionary和TemplateMatcher这三个类来完成对路由模板字符串的解析和匹配。

步骤一:定义路由模板列表

首先,我们需要定义一个包含所有可能路由模板的集合。假设我们已知的路由模板有以下两个:

public static class RouteTemplates
{
    public const string BlogPostUrl = "/{blogApp}/{postType}/{id:int}/{**slug}";  
    public const string BlogPostUrlWithExt = "/{blogApp}/{postType}/{idOrSlug}.html";  
}

步骤二:解析URL字符串并进行匹配

在我们获取到传入的URL字符串后,我们可以逐个遍历路由模板列表,并尝试将URL字符串与每个模板进行匹配。以下是一个示例代码:

using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Routing.Template;
class Program
{
    static void Main()
    {
        var routeTemplates = new[]
        {
            "/{blogApp}/{postType}/{id:int}/{**slug}",
            "/{blogApp}/{postType}/{idOrSlug}.html"
        };
        var urlPath = "/diary/problem/682";
        foreach (string template in routeTemplates)
        {
            var routeTemplate = TemplateParser.Parse(template);
            var values = new RouteValueDictionary();
            var matcher = new TemplateMatcher(routeTemplate, values);
            if (matcher.TryMatch(urlPath, values))
            {
                foreach (var item in values)
                {
                    Console.WriteLine("{0}: {1}", item.Key, item.Value);
                }
            }
        }
    }
}

在上述代码中,我们首先使用TemplateParser.Parse方法将路由模板字符串解析为RouteTemplate实例。然后,我们创建一个空的RouteValueDictionary对象来存储解析后的值。接下来,我们使用TemplateMatcher类的TryMatch方法来尝试将URL字符串与路由模板进行匹配,并将匹配结果存储在RouteValueDictionary中。

最后,我们可以通过遍历RouteValueDictionary来获取匹配结果。在示例代码中,我们只是简单地将结果输出到控制台上,但你可以根据自己的需求进行相应处理。

输出结果

对于给定的URL字符串 "/diary/problem/682",使用上述代码将得到以下输出:

blogApp: diary
postType: problem
id: 682
slug:

通过解析和匹配路由模板,我们成功地将URL字符串的组成部分与指定的命名参数进行了匹配,并获得了相应的值。

补充

如果遇到新的额外问题,可以看看这一篇:ASP.NET Core: TemplateMatcher 忽略类型约束问题的解决方法文章来源地址https://www.toymoban.com/article/682.html

到此这篇关于ASP.NET Core路由模板字符串匹配是如何通过手动档实现 route template 匹配字符串实现的的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/article/682.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ASP.NET Core中路由规则匹配

    RESTful约束,如果在一个控制器里面有多个Get、Post...的操作 1、在一个控制器里面可以定义多个API方法 2、通过路由规则来区分 /// summary /// 获取用户信息 /// /summary /// param name=\\\"user\\\"/param /// returns/returns [HttpGet] public User GetUser() {     //... } GetUser()对应的Request URL:https://localhost:71

    2024年02月13日
    浏览(34)
  • P3375 【模板】KMP 字符串匹配

    P3375 【模板】KMP 字符串匹配

    给出两个字符串 s 1 s_1 s 1 ​ 和 s 2 s_2 s 2 ​ ,若 s 1 s_1 s 1 ​ 的区间 [ l , r ] [l, r] [ l , r ] 子串与 s 2 s_2 s 2 ​ 完全相同,则称 s 2 s_2 s 2 ​ 在 s 1 s_1 s 1 ​ 中出现了,其出现位置为 l l l 。 现在请你求出 s 2 s_2 s 2 ​ 在 s 1 s_1 s 1 ​ 中所有出现的位置。 定义一个字符串 s s s 的

    2024年02月14日
    浏览(12)
  • 【字符串匹配】暴力匹配算法

    【字符串匹配】暴力匹配算法

    ​ 暴力匹配算法,也称为朴素字符串匹配算法,是一种简单但不高效的字符串匹配方法。它的原理非常直观,其主要思想是逐个字符地比较文本串和模式串,从文本串的每个可能的起始位置开始,依次检查是否有匹配的子串。以下是暴力匹配算法的详细原理: 1. 一个字一个

    2024年02月09日
    浏览(12)
  • 【数据结构】数组和字符串(十四):字符串匹配1:朴素的模式匹配算法(StringMatching)

    【数据结构】数组和字符串(十四):字符串匹配1:朴素的模式匹配算法(StringMatching)

      字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是由12个字符构成的一个字符串。一般把字符串记作: S = ′ ′ a 0 a 1 … a n − 1 ′ ′ S=\\\'\\\'a_{0} a_{1}…a_{n-1}\\\'\\\' S = ′′ a 0 ​ a 1 ​ … a n − 1 ′′ ​   其中S是串名,引号中

    2024年02月05日
    浏览(15)
  • 字符串查找匹配算法

    字符串查找匹配算法

    字符串匹配(查找)是字符串的一种基本操作:给定带匹配查询的文本串S和目标子串T,T也叫做模式串。在文本S中找到一个和模式T相符的子字符串,并返回该子字符串在文本中的位置。 Brute Force Algorithm,也叫朴素字符串匹配算法,Naive String Matching Algorithm。 基本思路就是将

    2024年02月14日
    浏览(10)
  • python字符串模糊匹配,并计算匹配分数

    python字符串模糊匹配,并计算匹配分数

    thefuzz包以前叫fuzzywuzzy,0.19版本开始改名为thefuzz,github地址: GitHub - seatgeek/thefuzz: Fuzzy String Matching in Python 可以通过命令pip install thefuzz安装此包。用法还是比较简单的: 上面两个字符串的相似度为89%。 我们先看看这个包下面的源码,来查看thefuzz是怎么实现模糊匹配的。the

    2023年04月23日
    浏览(36)
  • 字符串匹配-KMP算法

    字符串匹配-KMP算法

    KMP算法,字符串匹配算法,给定一个主串S,和一个字串T,返回字串T与之S匹配的数组下标。 在学KMP算法之前,对于两个字符串,主串S,和字串T,我们根据暴力匹配,定义两个指针,i指向主串S的起始,j指向字串T的起始,依次比较,如果 主串i位置的值等于子串j位置的值,

    2024年02月14日
    浏览(11)
  • 【kmp算法】字符串匹配

    kmp算法解决的是字符串匹配的问题,具体来说假定我们要在主串s[ ] 中匹配模式串p[ ],找到匹配到的位置loc; 最自然的想法是暴力写法 (BF)枚举主串字符s[ i ] ,和模式串p[ j ]。一个一个匹配,如果匹配失败,i指针回退回起点,往前进一位,再次进行比较,知道匹配成功。

    2024年02月04日
    浏览(11)
  • 字符串匹配算法:KMP

    字符串匹配算法:KMP

    Knuth–Morris–Pratt(KMP)是由三位数学家克努斯、莫里斯、普拉特同时发现,所有人们用三个人的名字来称呼这种算法,KMP是一种改进的字符串匹配算法,它的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。它的时间复杂度是 O(m+n) 字

    2024年02月06日
    浏览(7)
  • 一些常见的字符串匹配算法

    作者:京东零售 李文涛 字符串匹配在文本处理的广泛领域中是一个非常重要的主题。字符串匹配包括在文本中找到一个,或者更一般地说,所有字符串(通常来讲称其为模式)的出现。该模式表示为p=p[0..m-1];它的长度等于m。文本表示为t=t[0..n-1],它的长度等于n。两个字符串都建

    2023年04月25日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包