在開(kāi)發(fā)ASP.NET Core應(yīng)用程序時(shí),我們經(jīng)常需要處理URL路由。使用路由模板,我們可以定義特定格式的URL,并將其映射到相應(yīng)的控制器和操作方法上。但是,在某些情況下,我們可能需要根據(jù)傳入的URL字符串來(lái)判斷匹配的是哪個(gè)路由模板,這就需要手動(dòng)實(shí)現(xiàn)字符串的匹配過(guò)程。
使用Microsoft.AspNetCore.Routing進(jìn)行字符串匹配
在ASP.NET Core中,我們可以使用Microsoft.AspNetCore.Routing命名空間中的一些類(lèi)來(lái)實(shí)現(xiàn)字符串匹配。具體來(lái)說(shuō),我們可以使用TemplateParser、RouteValueDictionary和TemplateMatcher這三個(gè)類(lèi)來(lái)完成對(duì)路由模板字符串的解析和匹配。
步驟一:定義路由模板列表
首先,我們需要定義一個(gè)包含所有可能路由模板的集合。假設(shè)我們已知的路由模板有以下兩個(gè):
public static class RouteTemplates { public const string BlogPostUrl = "/{blogApp}/{postType}/{id:int}/{**slug}"; public const string BlogPostUrlWithExt = "/{blogApp}/{postType}/{idOrSlug}.html"; }
步驟二:解析URL字符串并進(jìn)行匹配
在我們獲取到傳入的URL字符串后,我們可以逐個(gè)遍歷路由模板列表,并嘗試將URL字符串與每個(gè)模板進(jìn)行匹配。以下是一個(gè)示例代碼:
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實(shí)例。然后,我們創(chuàng)建一個(gè)空的RouteValueDictionary對(duì)象來(lái)存儲(chǔ)解析后的值。接下來(lái),我們使用TemplateMatcher類(lèi)的TryMatch方法來(lái)嘗試將URL字符串與路由模板進(jìn)行匹配,并將匹配結(jié)果存儲(chǔ)在RouteValueDictionary中。
最后,我們可以通過(guò)遍歷RouteValueDictionary來(lái)獲取匹配結(jié)果。在示例代碼中,我們只是簡(jiǎn)單地將結(jié)果輸出到控制臺(tái)上,但你可以根據(jù)自己的需求進(jìn)行相應(yīng)處理。
輸出結(jié)果
對(duì)于給定的URL字符串 "/diary/problem/682",使用上述代碼將得到以下輸出:
blogApp: diary postType: problem id: 682 slug:
通過(guò)解析和匹配路由模板,我們成功地將URL字符串的組成部分與指定的命名參數(shù)進(jìn)行了匹配,并獲得了相應(yīng)的值。文章來(lái)源:http://www.zghlxwxcb.cn/article/682.html
補(bǔ)充
如果遇到新的額外問(wèn)題,可以看看這一篇:ASP.NET Core: TemplateMatcher 忽略類(lèi)型約束問(wèn)題的解決方法文章來(lái)源地址http://www.zghlxwxcb.cn/article/682.html
到此這篇關(guān)于ASP.NET Core路由模板字符串匹配是如何通過(guò)手動(dòng)檔實(shí)現(xiàn) route template 匹配字符串實(shí)現(xiàn)的的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!