我正在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个字符,所以它不应该达到任何限制?
标记
答案 0 :(得分:2)
在您的最佳路线中:
forgotprocess/QU1jfNoTb1Qd7qObop1FinQai4hCbzg7%2bMGfMF63d9Vvahi%2bmg9cT8KyaGo9jE1gbsWl5r%2f6DzpcRLf6HYNGeeFujG9QeblKUUvfxLDJ7UwcSCKD2AdsrR3EmC80PNCGGnGMQiya7ILNOJjWh%2fKSRQ%3d%3d
%2f将URL解码为/因此它会混淆路由引擎。
您能否改变生成字符串的方式以防止这种情况发生?
或者,如果它是最后一个参数,您可以像this post一样更改路线,但这可能会导致其他问题:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{*id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" }); // Parameter defaults