这是取自 MVC5 帐户 Controller 类的代码(这是在您设置 asp.net 项目时作为模板创建的) 但是当我将以下参数传递给这行代码时
model.UserName="User1", model.password="Password1",model.RememberMe=false, shouldLockout=false
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
它抛出一个异常说
Unable to cast object of type 'System.Int32' to type 'System.String'.
我不明白的是为什么上面的代码行认为参数是 int 而所有的参数都是 字符串或 bool 值。
有人要帮忙吗?感谢您的提前。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
}
LoginViewModel 类的代码
public class LoginViewModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
最佳答案
在尝试为同一场景解决一个非常相似的错误(无法将类型为 system.guid 的对象转换为类型为 system.string)时,我将问题追溯到已用于两个键列的数据类型角色表(AspNetRoles 和 AspNetUserRoles)。这些必须是 nvarchar 类型,而不是 uniqueidentifier。
PasswordSignInAsync 背后的 SQL 查询从 AspNetUsers、AspNetUserRoles、AspNetUserClaims 和 AspNetUserLogins 收集数据,因此我建议您检查所有这些表中的键列类型是否与这些数据将映射到的预期实体相匹配。据我所知,这些应该如下:
AspNetUsers > [Id] NVARCHAR (128)
AspNetRoles > [Id] NVARCHAR (128)
AspNetUserRoles > [UserId] NVARCHAR (128), [RoleId] NVARCHAR (128)
AspNetUserClaims > [Id] INT
AspNetUserLogins > [UserId] NVARCHAR (128)
关于c# - ApplicationSignInManager 类抛出无效的转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201321/