在我下面的代码中,当 postSummary.SEOFriendlyTitleInURL 包含中文字符时,这些字符将被编码在 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 中保留字符的列表。见https://www.rfc-editor.org/rfc/rfc3986#section-2.2
- 单引号和双引号
- 制表符
尽管如此,非 ASCII 字符在某些时候应该进行百分比编码,因为它们在 URI 中无效,最好在生成 URL 时完成。但是通过观察 Fiddler 在通过包含中文字符的 URL 请求页面时,似乎该 URL 将被自动编码(可能通过网络浏览器)。为了可读性,我选择让 Web 浏览器完成编码工作。