2014-11-29 3 views
0

Это код, взятый из класса контроллера учетных записей MVC5 (он создается как шаблон при настройке проекта asp.net) Однако, когда я передаю следующий параметр этой строке кодКласс ApplicationSignInManager вызывает недопустимое исключение литья

model.UserName = "User1", model.password = "Password1", model.RememberMe = ложь, shouldLockout = ложь

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

    } 

Код для 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; } 
} 
+1

Он выдает эту ошибку, потому что вы отправляете строку как параметр, но ей нужен Int32. – CodingDefined

+0

Это не так, как я проверил тип параметра. model.UserName (строка) model.password (String), model.RememberMe (bool), shouldLockOut (bool) – Sike12

+1

- это ваше имя пользователя, пароль в int, попробуйте сначала изменить его на строку. – CodingDefined

ответ

1

В попытке решить очень похожую ошибку (Невозможно привести объект типа System.Guid к типу System.String) для того же сценария, я прослежена проблема с типами данных, которые использовались для ключевых столбцов двух таблиц ролей (AspNetRoles и AspNetUserRoles). Они должны быть типа nvarchar, а не uniqueidentifier.

SQL-запрос за PasswordSignInAsync собирает данные из AspNetUsers, AspNetUserRoles, AspNetUserClaims и AspNetUserLogins, поэтому я предлагаю вам проверить, что ваши ключевые столбцы типов во всех этих таблицах соответствуют ожидаемым объектам, к которым будут привязаны эти данные. Насколько мне известно, они должны быть следующими:

AspNetUsers> [Id] NVARCHAR (128)

AspNetRoles> [Id] NVARCHAR (128)

AspNetUserRoles> [UserId ] NVARCHAR (128), [Идентификатор роли] NVARCHAR (128)

AspNetUserClaims> [Id] INT

AspNetUserLogins> [UserId] NVARCHAR (128)

+0

Я попробую и дам вам знать @sharptooth. Это выглядит многообещающим. – Sike12

Смежные вопросы