Asp.net mvc 3 如何防止Html.ActionLink在URL中编码非ASCII字符

Asp.net mvc 3 如何防止Html.ActionLink在URL中编码非ASCII字符,asp.net-mvc-3,routes,url-encoding,Asp.net Mvc 3,Routes,Url Encoding,在下面的代码中,当postsummmary.seofriendlyttleinurl包含中文字符时,这些字符将被编码到url中 @Html.ActionLink( postSummary.Title, "View", new { id = postSummary.Id, friendlyTitle = postSummary.SEOFriendlyTitleInURL }) 虽然该url在Google Chrome和Fir

在下面的代码中,当postsummmary.seofriendlyttleinurl包含中文字符时,这些字符将被编码到url中

@Html.ActionLink(
    postSummary.Title,
    "View",
    new
    {
        id = postSummary.Id,
        friendlyTitle = postSummary.SEOFriendlyTitleInURL
    })
虽然该url在Google Chrome和Firefox中显示为原始字符,但在IE中它是一个编码字符串。我想防止ActionLink方法的默认编码行为,因为我可以直接在地址栏中键入那些未编码的字符。所以我认为它们在URL中是合法的

我可以简单地手动构建链接,但为了保持一致性,最好生成链接:

<a href="/post/@postSummary.SEOFriendlyTitleInURL/@postSummary.Id">@postSummary.Title</a>

编辑:

我目前的解决方案是:使用Html.ActionLink结合Server.UrlDecode方法,告诉框架不要只编码非ASCII字符,而不要编码任何字符。如果某些字符确实需要进行百分比编码,它们只能出现在“friendlyTitle”片段中。因为该片段仅用于可读性,所以我将这些字符替换为破折号字符

这些替换字符包括

  • URI中保留字符的列表。看
  • 单双引号
  • 制表符

尽管如此,非ASCII字符还是应该在某些时候进行百分比编码,因为它们在URI中无效,最好在生成URL时进行编码。但通过观察Fiddler在通过包含汉字的URL请求页面时,似乎URL将自动编码(可能通过web浏览器)。为了可读性,我选择让web浏览器进行编码工作。

就您的
标记中生成的内容而言,浏览器之间没有区别;唯一的区别在于浏览器的显示方式。这里没有什么可以改变的
Html.ActionLink()
正确编码/未编码。

不要被地址栏中显示的内容所愚弄;这并不能可靠地表明URL中的内容是否合法。@Andrew如果我在地址栏中键入的内容可以引导我找到我想要的页面,那就足够了。即使它们是非法的,我也会在意的。是的,生成的url是合法的,可以正常工作,但很难阅读。我在url中包含该标题只是为了可读性,否则id值就足够了。我希望有人看到的网址知道什么是该网页谈论时,我在其他网站上共享的地址。我考虑的另一件事是,搜索引擎可能关心url中的内容,但我不确定。当我说它不容易被读取时,这意味着每一个字符都会产生3个字节,如“%E8%80%83”,想象一篇标题只有几个字符的文章的地址可能有多长