asp.net-mvc-3 - .NET MVC 路由与 Url 编码问题

标签 asp.net-mvc-3 routes url-encoding

我有以下路由代码:

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/

相关文章:

asp.net-mvc - MVC @html.textbox用于预填充 Guid 默认值

javascript - MVC 3 Razor View : Generating JavaScript from a boolean model value

ruby-on-rails - Rails 中嵌套命名路线?

javascript - 在 NODE.JS 中,换行符 (%0A) 将解码回什么字符?

Python 请求奇怪的 URL %-编码

c# - 如何使用 Html.EditorFor 在 MVC3 中呈现单选按钮?

asp.net-mvc - MVC3 验证 - 需要组中的一个

php - Laravel 5 条件路由和多个 Controller

python-3.x - 为什么 Google Chrome 会在我的 flask 网址中附加一个正斜杠,而实际上没有?

javascript - 解码带有百分比符号 (%HH) 的十六进制字符串