我有一条看起来像这样的路线:

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/

10-11 23:26
查看更多