我有一条看起来像这样的路线:
routes.MapRoute(
"BlogTags",
"Blog/Tags/{tag}",
new { controller = "Blog", action = "BrowseTag", viewRss = false }
);
我使用该路由创建一个URL,如下所示:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = sortedTags[i].Tag })%>
但是,当使用带有#字符的标记(例如“C#”)时,路由引擎不会对其进行转义,因此我得到的URL如下所示:
<a href="/Blog/Tags/C#">C#</a>
我需要的是#转义的,以便它看起来像这样:
<a href="/Blog/Tags/C%23">C#</a>
我尝试在进入路线之前在标记上执行Url.Encode,如下所示:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = Url.Encode(sortedTags[i].Tag) })%>
但是,这会使路由引擎两次转义#(这会导致ASP.NET崩溃并产生错误的请求错误):
<a href="/Blog/Tags/C%2523">C#</a>
我怎样才能使路由引擎为我正确地转义该#字符?
提前谢谢你的帮助。
最佳答案
作为一个非常秃顶的解决方案,我将在RouteLink的输出中手动将“#”替换为“%23”。只要您在网址中不使用片段,就可以使用。
您可以使用正则表达式仅将替换应用于网址的最后一部分。
关于c# - 使ASP.NET MVC正确转义路由中的#(哈希/磅)字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2201898/