使用 GET 在 asp.net 操作中未正确接受字符串

A string is not accepted correctly in asp.net action using GET

我正在尝试使用 ASP.NET 的 Identity 2.0 系统确认电子邮件。

一切顺利。我在电子邮件中获取令牌(代码),然后单击它。

http://www.mywebsite.com/Account/ConfirmEmail?Email=myemail@gmail.com&token=bkuVkQZUdEYrcrkcGWuzuPJsPt9cgk77oEZg5c4NVzfjye5THEtzQunBN7+/3SBOEbbmWD2K1loZfEUTh0ggm3qKuvKYGl9b0TWJBStHEeq8/G5RJ+dAvHh/fdt8Vtt5xyxHUgXMgT6+tDMox0Skfg==

但是,当我在我的操作中收到令牌时,加号被删除并替换为空格。显然确认失败。

// GET: /Account/ConfirmEmail
[AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(string Email, string token)
{
    if (Email == null || token == null)
    {
        return View("Error");
    }
    ApplicationUser user = UserManager.FindByEmail(Email);
    var result = await UserManager.ConfirmEmailAsync(user.Id, token);
    if (result.Succeeded)
    {
        return RedirectToAction("Confirmed", "Account");
    }
    else
    {
        return View("Error");
    }
}

我收到了这个令牌:

bkuVkQZUdEYrcrkcGWuzuPJsPt9cgk77oEZg5c4NVzfjye5THEtzQunBN7 /3SBOEbbmWD2K1loZfEUTh0ggm3qKuvKYGl9b0TWJBStHEeq8/G5RJ dAvHh/fdt8Vtt5xyxHUgXMgT6 tDMox0Skfg==

我应该怎么做才能避免这种情况?

您可以在生成令牌后对其进行编码:

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
code = System.Web.HttpUtility.UrlEncode(code);

这样所有浏览器都能正确解释令牌中的所有特殊字符。