.NET Core中禁用SmartBreadCrumbs对RouteValues的URL编码方法
要让面包屑生成的URL保留categoryName中的斜杠,避免被编码,可按以下两步操作:
1. 配置支持斜杠的路由规则
首先要确保路由能正确识别带斜杠的categoryName参数,否则即使URL包含斜杠,也会匹配失败。在Shop区域的路由配置中,使用贪婪路由参数({categoryName*})捕获包含斜杠的完整片段:
routes.MapRoute( name: "ShopCategory", url: "shop/Category/{id}/{categoryName*}", defaults: new { controller = "Category", action = "Index", area = "Shop" } );
该规则会将/Ladies/Shoes这类带斜杠的内容完整识别为categoryName参数,不会把斜杠当作路由分隔符。
2. 手动设置面包屑节点的URL
默认情况下,SmartBreadCrumbs会对RouteValues中的参数值做URL编码,导致斜杠被转为%2F。直接跳过自动路由生成逻辑,手动拼接URL并赋值给面包屑节点的Url属性即可解决:
// 手动拼接目标URL,保留原始斜杠 var targetUrl = $"/shop/Category/{category.Id}/{string.Join("/", categoryNames)}"; // 创建面包屑节点时直接指定Url,替代RouteValues _node = new MvcBreadcrumbNode("Index", "Category", category.Name, areaName: "Shop") { Parent = _node, Url = targetUrl };
这样生成的面包屑链接会直接使用手动拼接的URL,斜杠不会被编码,同时路由也能正确解析该地址。
内容的提问来源于stack exchange,提问作者James Andrew Smith
相关产品推荐
相关产品推荐

