2014-11-21 5 views
10

Я пытаюсь реализовать стандарт Id в AspNetUsers от nvarchar до int. Мне удалось заставить эту сторону работать. Однако моя проблема заключается в том, что когда я пытаюсь войти в систему, я продолжаю получать ошибку из класса UserManager.UserManager Сохраняет металирование System.ArgumentNullException

Мой код ниже:

public class UserManager : UserManager<ApplicationUser, int> 
{ 
    public UserManager(IUserStore<ApplicationUser, int> store) 
    : base(store) 
{ 
} 

А на странице входа в систему я получил

if (IsValid) 
     { 
      // Validate the user password 
      var manager = Context.GetOwinContext().GetUserManager<UserManager>(); 
      var user = manager.Find(UserName.Text, Password.Text); //This line throws the error 
      if (user != null) 
      { 
       IdentityHelper.SignIn(manager, user, isPersistent: false); 
       Response.Redirect("~/Home.aspx");    } 
      else 
      { 
       FailureText.Text = "Invalid username or password."; 
       ErrorMessage.Visible = true; 
      } 
     } 

Ошибка я получаю это System.ArgumentNullException: Значение не может быть пустым. Имя параметра: менеджер. Кто-нибудь еще сталкивается с этой проблемой? Заранее спасибо за помощь

Трассировка стека

[ArgumentNullException: Value cannot be null. 
Parameter name: manager] 
Microsoft.AspNet.Identity.UserManagerExtensions.Find(UserManager`2 manager, String userName, String password) +221 
Account_Login.LogIn(Object sender, EventArgs e) in Login.aspx.cs:17 
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628026 
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103 
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 
System.Web.UI.<ProcessRequestMainAsync>d__14.MoveNext() +5226 
+0

Не могли бы вы указать, какие строки бросает исключение? –

+0

@MotiAzu для меня это строка 'var user = manager.Find (UserName.Text, Password.Text);' – Izzy

+0

@Izzy вставить полную трассировку стека вашего 'ArgumentNullException' – wal

ответ

13

Убедитесь, что UserManager зарегистрирован в вас Owin контекст. Вы должны иметь что-то подобное в вашем Startup классе:

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 

обеспечивают также, что вы [assembly: OwinStartup(typeof(YourNamespace.Startup))] атрибут применяется к веб-узла.

+0

После попытки вашего предложения я получаю та же ошибка, но в 'public CustomRoleStore (ApplicationDbContext context)' строка:/ – Izzy

+0

@Izzy, что означает, что решение является правильным, и вы просто сталкиваетесь с какой-то другой проблемой, с которой вам может быть трудно помочь, поскольку вы не предоставили любой код, окружающий эту строку. – decPL

+0

@decPL Я могу добавить соответствующий код, если требуется – Izzy

2

метод manager.Find() искать только в первичный ключ таблицы, вы должны использовать что-то вроде:

Context db = new Context(); 
if (db.Users.Select(u => u).Where(u => u.Username == Username && u.Pass == Password).ToList().Count() == 1) 
{ 
     // login 
} 
Смежные вопросы