UserManager Сохраняет металирование System.ArgumentNullException
Я пытаюсь реализовать стандарт Id
в AspNetUsers
от nvarchar
до int
. Мне удалось заставить эту сторону работать. Однако моя проблема в том, что когда я пытаюсь войти в систему, я продолжаю получать ошибку из класса UserManager
.
Мой код ниже:
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
Ответы
Ответ 1
Убедитесь, что UserManager
зарегистрирован в вашем контексте OWIN. У вас должно быть что-то вроде этого в классе Startup
:
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
Также убедитесь, что у вас есть атрибут [assembly: OwinStartup(typeof(YourNamespace.Startup))]
, примененный к вашей веб-сборке.
Ответ 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
}