使用 ASP.NET MVC4 WebSecurity.ConfirmAccount(string token) 的 long 到 int 转换异常

long to int conversion exception with ASP.NET MVC4 WebSecurity.ConfirmAccount(string token)

这似乎让我感到困惑。我正在使用 MVC4 Simple membership 只是为了帮助自动化我的帐户流程。一切似乎都正常,除非我调用 WebSecurity.ConfirmAccount(string token) 和 WebSecurity.ResetPassword(string token, string newPassword) 方法。当使用为用户生成的正确令牌传递时,方法 throw 和 exception of long to in conversion error 但执行时没有错误,当使用错误的令牌传递时 return false 。我有没有搞错?

您不能将类型 long 转换为 int,因为 long 从内存中保留 64 位,而 int 从内存中保留 32 位。因此,尝试将 long 转换为 int 将导致异常。

听起来您的 UserId 列是作为 bigint 而不是 int 创建的。 WebMatrix.WebData.SimpleMembershipProvider 期望该列是 int:

https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/WebMatrix.WebData/SimpleMembershipProvider.cs#L434