我有以下路由代码:
routes.MapRoute(
"email-validated/{sessionId}",
"email-validated/{sessionId}",
new { controller = "User", action = "EmailValidated", sessionId = UrlParameter.Optional }
);
当我使用 url 编码的路由时,它不会匹配 %2f、%2b 和其他一些转义字符的路由。它也不会匹配非 url 编码(带 + 等的东西)例如
这有效:
email-validated/XQiKC6KMM%2cmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
这不起作用(包含 %2f 等):
email-validated/XQiKC6KMM%2fmko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
这不起作用(包含+等)
email-validated/XQiKC6KMM+mko4nOvzGRwPu9oaZFoCtXsFFJg3ZTf9S5rsBbLGjnz3FN3SJ0apEZcqK1PIcCY28mRMykB39XnFLKaL7390CDfLZiV77cso
最佳答案
如果可以的话,您需要确保您的 sessionId URL 安全。 sessionId是Base64编码的,Base64中存在三个URL问题字符,“/”,“+”和“=”。创建链接时,使用以下内容对您的 sessionId 进行编码:
public string ToUrlSafeBase64String(string Base64String)
{
// avoid any slashes, plus signs or equal signs
// the following makes this base64 string url safe
Base64String = Base64String.Replace("/", "_");
Base64String = Base64String.Replace("+", "-");
return Base64String.Replace("=", String.Empty);
}
然后,使用以下命令重新创建原始 Base64 编码字符串:
public string FromUrlSafeBase64String(string Base64String)
{
// add back any slashes, plus signs or equal signs
// the following makes this url safe string a base64 string
Base64String = Base64String.Replace("_", "/");
Base64String = Base64String.Replace( "-", "+");
return Base64String.PadRight(Base64String.Length + (4 - Base64String.Length % 4) % 4, '=');
}
关于asp.net-mvc-3 - .NET MVC 路由与 Url 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7225563/