类引发无效的强制转换异常

本文关键字:转换 异常 无效 | 更新日期: 2023-09-27 18:32:23

这是从 MVC5 帐户控制器类中获取的代码(这是在设置 asp.net 项目时作为模板创建的)但是当我将以下参数传递给这行代码时

型。用户名="用户1",模型.密码="密码1",模型。记住我=假,应该锁定=假

 var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 

它抛出一个异常说

无法将类型为"System.Int32"的对象强制转换为类型"System.String"。

我不明白的是,为什么上面的代码行认为参数是int,而所有参数都是字符串或布尔值。

有人愿意寻求帮助吗?感谢您的提前。

    [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);   
    }

登录视图模型类的代码

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 类型,而不是唯一标识符。

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)