2

我在 asp.net MVC 3 web 应用程序中实现密码重置工具。发送给用户的电子邮件包含一个带有加密字符串的链接。下面是一个示例链接:

forgotprocess/QU1jfNoTb1Qd7qObop1FinQai4hCbzg7%2bMGfMF63d9Vvahi%2bmg9cT8KyaGo9jE1gbsWl5r%2f6DzpcRLf6HYNGeeFujG9QeblKUUvfxLDJ7UwcSCKD2AdsrR3EmC80PNCGGnGMQiya7ILNOJjWh%2fKSRQ%3d%3d

单击链接时,我收到 404 错误。为了测试我使用 RouteDebugger 的路线,我仍然得到 404 页面 - 似乎链接没有进入应用程序。但是,如果我将链接更改为以下内容:

forgotprocess/?i=QU1jfNoTb1Qd7qObop1FinQai4hCbzg7%2bMGfMF63d9Vvahi%2bmg9cT8KyaGo9jE1gbsWl5r%2f6DzpcRLf6HYNGeeFujG9QeblKUUvfxLDJ7UwcSCKD2AdsrR3EmC80PNCGGnGMQiya7ILNOJjWh%2fKSRQ%3d%3d

它工作正常。我宁愿不必使用查询字符串参数。

整个链接的大小约为 200 个字符,所以它不应该达到任何限制吗?

标记

4

1 回答 1

2

在您的顶级路线中:

forgotprocess/QU1jfNoTb1Qd7qObop1FinQai4hCbzg7%2bMGfMF63d9Vvahi%2bmg9cT8KyaGo9jE1gbsWl5r%2f6DzpcRLf6HYNGeeFujG9QeblKUUvfxLDJ7UwcSCKD2AdsrR3EmC80PNCGGnGMQiya7ILNOJjWh%2fKSRQ%3d%3d

%2f 会将 URL 解码为 / 所以它会混淆路由引擎。

您可以更改生成加密字符串的方式以防止这种情况发生吗?

或者,如果它是最后一个参数,您可以像在这篇文章中那样更改您的路线,但这可能会导致其他问题:

routes.MapRoute(
    "Default",                                                // Route name
    "{controller}/{action}/{*id}",                            // URL with parameters
    new { controller = "Home", action = "Index", id = "" });  // Parameter defaults
于 2012-08-19T14:00:09.390 回答