错误HTTP 404.11通过查询字符串传递帐户激活令牌

时间:2014-02-07 13:48:08

标签: asp.net asp.net-membership asp.net-mvc-5 identity asp.net-identity

我正在尝试实现密码重置功能。我使用ASP.NET身份。

我正在使用UserManager.GetConfirmationToken返回如下标记:

  

UW / cj4xUj08kiGCntnWs7z1eUcWlyfNczH5IZfvf0ScTi4L1jgdkkus / Zb5ROJOWb%2b1XAVRSiBUvVGnESfEyauDDa4u%2bPDUH6D / CIpwPcFYRvLi%2B%2bq6f%2bRIhKHRTsGMV0y8lXpSZ5VqySWGSSaW9kofGage / IjW4HrvONeEtA4Szov3u7HgmqEUf0yzgivJ0

然后,我撰写我的网址,然后通过电子邮件将其发送给注册用户。激活帐户的网址如下:

http://localhost:4322/Account/Confirm/UW/cj4xUj08kiGCntnWs7z1eUcWlyfNczH5IZfvf0ScTi4L1jgdkkus/Zb5ROJOWb%2b1XAVRSiBUvVGnESfEyauDDa4u%2bPDUH6D/CIpwPcFYRvLi%2b%2bq6f%2bRIhKHRTsGMV0y8lXpSZ5VqySWGSSaW9kofGage/IjW4HrvONeEtA4Szov3u7HgmqEUf0yzgivJ0

单击时会出现此错误:
Error HTTP 404.11 - Double escape sequence issue

4 个答案:

答案 0 :(得分:1)

这里的根本问题是尝试在路径中添加确认代码。它应该通过querystring发送。 所以它应该是这样的

http://localhost:4322/Account/Confirm?code=UW/cj4xUj08kiGCntnWs7z1eUcWlyfNczH5IZfvf0ScTi4L1jgdkkus/Zb5ROJOWb%2b1XAVRSiBUvVGnESfEyauDDa4u%2bPDUH6D/CIpwPcFYRvLi%2b%2bq6f%2bRIhKHRTsGMV0y8lXpSZ5VqySWGSSaW9kofGage/IjW4HrvONeEtA4Szov3u7HgmqEUf0yzgivJ0

这将节省试图解决此问题的日子。

我在这个评论中找到了答案:http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx?PageIndex=1#comments感谢pranav rostgi

答案 1 :(得分:0)

您的令牌包含/个符号,这些符号被解析为某个服务器页面的路径。您可以以某种方式对其进行编码(可能是base64)并使用查询字符串参数,如...?token=...。或者更改令牌生成,使其仅包含好的符号

答案 2 :(得分:0)

您可能需要使用httputility.urlencode

对网址进行编码

答案 3 :(得分:0)

确保您没有对令牌进行双重编码,因此您可以执行以下操作来发送电子邮件:

                string code = await UserManager.GetConfirmationToken(user.Id);
                var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                await SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");