2014-11-21 18 views
10

Próbuję zaimplementować standard Id w AspNetUsers z nvarchar na int. Udało mi się zmusić tę stronę do działania. Jednak mój problem polega na tym, że gdy próbuję się zalogować, ciągle pojawia się błąd z klasy UserManager.UserManager Przechowuje rzucanie System.ArgumentNullException

Moje kodu jest poniżej:

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

A na stronie logowania Mam

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

Błąd Dostaję jest System.ArgumentNullException: Wartość nie może być null. Nazwa parametru: menedżer. Czy ktoś inny natrafił na ten problem? Dzięki z góry za pomoc

Śledzenie stosu

[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

możesz określić, która linia jest rzucanie wyjątku? –

+0

@MotiAzu dla mnie jest to wiersz 'var user = manager.Find (nazwa_użytkownika.tekst, hasło.tekst);' – Izzy

+0

@Izzy wklej pełny ślad stosu twojego argumentu "ArgumentNullException" – wal

Odpowiedz

13

Upewnij się, że UserManager jest zarejestrowany w was OWIN kontekst. Powinieneś mieć coś takiego w swojej klasie Startup:

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

zapewniają również, że atrybut [assembly: OwinStartup(typeof(YourNamespace.Startup))] stosowane do montażu internetowej.

+0

Po wypróbowaniu sugestii, otrzymuję ten sam błąd, ale w przypadku 'public CustomRoleStore (applicationDbContext context)':/ – Izzy

+0

@Izzy, co oznacza, że ​​rozwiązanie jest poprawne i napotykasz na inny problem, który może być dla Ciebie trudny, ponieważ nie dostarczyłeś dowolny kod otaczający tę linię. – decPL

+0

@decPL Mogę dodać odpowiedni kod, jeśli jest to wymagane – Izzy

2

metoda manager.Find() szukaj tylko w kluczu podstawowym tabeli, należy użyć coś takiego:

Context db = new Context(); 
if (db.Users.Select(u => u).Where(u => u.Username == Username && u.Pass == Password).ToList().Count() == 1) 
{ 
     // login 
} 
Powiązane problemy