Я использую следующий код для процедуры входа в систему. Я сохранил точку останова на контроллере входа и функцию validateUser сервисного уровня, чтобы проверить, где я ошибся, и обнаружил, что получаю нулевое значение в объекте dbUser в функции ValidateUser уровня обслуживания, и он показывает неверную попытку входа в систему. Где я неправ? Я что-то упустил?
Вид контроллера
public ActionResult Login(UserLoginDTO userLoginDTO)
{
try
{
if (ModelState.IsValid)
{
userLoginDTO.Password = Helper.EncodePasswordToBase64(userLoginDTO.Password);
UserLoginDTO user = userLoginService.ValidateUser(userLoginDTO);
if (user != null)
{
this.SignInUser(user, false);
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Invalid login attempt.");
}
}
catch (Exception ex)
{
Log.Error(ex);
//throw;
}
return View(userLoginDTO);
}
Модель просмотра
public class UserLoginDTO
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
Сервисный уровень
public interface IUserLoginService
{
UserLoginDTO ValidateUser(UserLoginDTO userLoginModel);
}
public class UserLoginService : IUserLoginService
{
private IUnitOfWork unitOfWork;
public UserLoginService(IUnitOfWork _unitOfWork)
{
unitOfWork = _unitOfWork ?? new UnitOfWork();
}
public UserLoginDTO ValidateUser(UserLoginDTO userLoginModel)
{
UserLogin dbUser = unitOfWork.UserLoginRepository.All()
.Where(x => x.UserName == userLoginModel.UserName
&& x.Password == userLoginModel.Password)
.FirstOrDefault();
if (dbUser != null)
{
UserLoginDTO userDTO = dbUser.Convert();
return userDTO;
}
return null;
}
}
Слой репозитория
public interface IUnitOfWork
{
int Save();
Task<int> SaveAsync();
IRepository<UserLogin> UserLoginRepository { get; }
}
private IRepository<UserLogin> _userLoginRepository;
public IRepository<UserLogin> UserLoginRepository
{
get
{
return _userLoginRepository ??
(_userLoginRepository = new RepositoryBase<UserLogin>(_context));
}
}