Asp.net mvc MVC 5,无效令牌

Asp.net mvc MVC 5,无效令牌,asp.net-mvc,asp.net-mvc-5,access-token,asp.net-identity-2,Asp.net Mvc,Asp.net Mvc 5,Access Token,Asp.net Identity 2,这个问题我已经讨论过好几次了,但我还是解决不了 我的注册过程99%的时间都很顺利。但有时我在确认电子邮件地址时(通过电子邮件中的链接)会出现无效令牌错误。我现在甚至正在对令牌进行URL编码/解码,但我仍然偶尔会遇到错误 注册行动: string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); code = System.Web.HttpUtility.UrlEncode(code); var callb

这个问题我已经讨论过好几次了,但我还是解决不了

我的注册过程99%的时间都很顺利。但有时我在确认电子邮件地址时(通过电子邮件中的链接)会出现无效令牌错误。我现在甚至正在对令牌进行URL编码/解码,但我仍然偶尔会遇到错误

注册行动:

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
code = System.Web.HttpUtility.UrlEncode(code);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
并确认行动:

code = System.Web.HttpUtility.UrlDecode(code);
var result = await UserManager.ConfirmEmailAsync(userId, code);
我可以确认每个“失败”的用户都有安全戳。而且名称/用户名似乎不包含任何不可靠的字符

还有什么我可以查的吗

你可以试试这个代码

你可以试试这个代码


你的web.config中有
MachineKey
吗?嗯,没有。我会想办法加一个,让你知道我的进展如何。因为这个问题是间歇性的,所以我可能需要一段时间才能判断它是否有效。感谢您的指针。令牌的一部分包含web应用程序的名称(在IIS中定义),如果您在云中运行它,在应用程序重新启动后,您可能会得到一个不同的名称-这也可能导致您的问题。但是机器钥匙应该能修好它。只需确认-获取令牌,重新启动IIS,尝试确认令牌,然后使用计算机密钥执行相同操作。我感谢您的响应-将让您不断更新!你的web.config中有
MachineKey
吗?嗯,没有。我会想办法加一个,让你知道我的进展如何。因为这个问题是间歇性的,所以我可能需要一段时间才能判断它是否有效。感谢您的指针。令牌的一部分包含web应用程序的名称(在IIS中定义),如果您在云中运行它,在应用程序重新启动后,您可能会得到一个不同的名称-这也可能导致您的问题。但是机器钥匙应该能修好它。只需确认-获取令牌,重新启动IIS,尝试确认令牌,然后使用计算机密钥执行相同操作。我感谢您的响应-将让您不断更新!
var encodedCode= code.Base64ForUrlEncode();
var decodedCode= encodedCode.Base64ForUrlDecode();

public static class UrlEncoding
{
        public static string Base64ForUrlEncode(this string str)
        {
            byte[] encbuff = Encoding.UTF8.GetBytes(str);
            return HttpServerUtility.UrlTokenEncode(encbuff);
        }

        public static string Base64ForUrlDecode(this string str)
        {
            byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
            return Encoding.UTF8.GetString(decbuff);
        }
}