Получение доступа к странице входа с помощью токенаC#

Место общения программистов C#
Ответить
Гость
 Получение доступа к странице входа с помощью токена

Сообщение Гость »


Я разрабатываю сайт электронной коммерции. Я использую Entity Framework и веб-API и, соответственно, создаю пользовательский уровень.

это мой слой сущности

пространство имен Core.DataAccess.EntityFramework { общедоступный класс EfBaseRepository: IBaseRepository где TEntity: класс, IEntity, new() где TContext: DbContext, новый() { общедоступная асинхронная задача AddAsync (объект TEntity) { используя (контекст TContext = новый TContext()) { ждут context.Set().AddAsync(entity); ждут context.SaveChangesAsync(); возврат объекта; } } общедоступная асинхронная задача DeleteAsync (int id) { используя (контекст TContext = новый TContext()) { var deleteEntity = ждут context.Set().FindAsync(id); context.Set().Remove(deleteEntity); var data = await context.SaveChangesAsync(); если (данные > 0) вернуть истину; вернуть ложь; } } public async Task GetAsync (Expression filter) { используя (контекст TContext = новый TContext()) { return await context.Set().SingleOrDefaultAsync(filter); } } public async Task GetListAsync (Expression filter = null) { используя (контекст TContext = новый TContext()) { возвратный фильтр == ноль ? await context.Set().ToListAsync() : ждут context.Set().Where(filter).ToListAsync(); } } общедоступная асинхронная задача UpdateAsync (объект TEntity) { используя (контекст TContext = новый TContext()) { context.Set().Update(entity); ждут context.SaveChangesAsync(); возврат объекта; } } } } это пользовательский контроллер

пространство имен Bussines.Concrete { общедоступный класс UserService: IUserService { частный IUserDal только для чтения _userDal; Настройки приложения _appSettings; IMapper _mapper; public UserService (IUserDal userDal, IOptions appSettings, сопоставитель IMapper) { _userDal = userDal; _appSettings = appSettings.Value; _mapper = картограф; } общедоступная асинхронная задача AddAsync(UserAddDto userAddDto) { вар пользователь = _mapper.Map(userAddDto); user.CreatedDate = DateTime.UtcNow; user.CreatedUserId = 1; вар userAdd = ждут _userDal.AddAsync (пользователь); вар userDto = _mapper.Map(userAdd); вернуть новый SuccessApiDataResponse(userDto, Messages.Added); } общедоступная асинхронная задача DeleteAsync (int id) { вернуть новый SuccessApiDataResponse(await _userDal.DeleteAsync(id), Messages.Deleted); } общедоступная асинхронная задача GetByIdAsync (int id) { вар пользователь = ждут _userDal.GetAsync(x => x.Id == id); если (пользователь != ноль) { вар userDto = _mapper.Map(пользователь); вернуть новый SuccessApiDataResponse(userDto, Messages.Listed); } вернуть новый ErrorApiDataResponse(null, Messages.NotListed); } public async Task GetListAsync (Expression filter = null) { если (фильтр == ноль) { вар ответ = ждут _userDal.GetListAsync(); вар userDetailDtos = _mapper.Map(ответ); вернуть новый SuccessApiDataResponse(userDetailDtos, Messages.Listed); } еще { вар ответ = ждут _userDal.GetListAsync(фильтр); вар userDetailDtos = _mapper.Map(ответ); вернуть новый SuccessApiDataResponse(userDetailDtos, Messages.Listed); } } public async Task GetAsync(Expression фильтр = ноль) { вар пользователь = ждут _userDal.GetAsync(фильтр); если (пользователь!= ноль) { вар userDto= _mapper.Map(пользователь); вернуть новый SuccessApiDataResponse(userDto, Messages.Listed); } вернуть новый ErrorApiDataResponse(null, Messages.NotListed); } public async Task UpdateAsync(UserUpdateDto userUpdateDto) { var getUser = await _userDal.GetAsync(x => x.Id == userUpdateDto.Id); вар пользователь = _mapper.Map(userUpdateDto); user.CreatedDate = getUser.CreatedDate; user.CreatedUserId = getUser.CreatedUserId; user.UpdatedDate = DateTime.Now; user.UpdatedUserId = 1; user.Token = userUpdateDto.Token; user.TokenExpireDate = userUpdateDto.TokenExpireDate; вар resultUpdate = ждут _userDal.UpdateAsync (пользователь); вар userUpdateMap = _mapper.Map(resultUpdate); вернуть новый SuccessApiDataResponse(userUpdateMap, Messages.Updated); } } } это мой контроллер, который входит в систему с помощью контроллера аутентификации

пространство имен Bussines.Concrete { общедоступный класс AuthService: IAuthService { частный IUserService _userService; частный ITokenService _tokenService; частный IMapper _mapper; public AuthService (IUserService userService, ITokenService tokenService, сопоставитель IMapper) { _userService = userService; _tokenService = tokenService; _mapper = картограф; } общедоступная асинхронная задача LoginAsync (LoginDto loginDto) { var user = await _userService.GetAsync(x => x.UserName == loginDto.UserName && x.Password == loginDto.Password); если (пользователь == ноль) { вернуть новый ErrorApiDataResponse(null, Messages.UserNotFound); } еще { если (user.Data.TokenExpireDate == null || String.IsNullOrEmpty(user.Data.Token)) { вар accessToken = _tokenService.CreateToken(user.Data.Id, user.Data.UserName); вар userUpdateDto = _mapper.Map(user.Data); userUpdateDto.Token = accessToken.Token; userUpdateDto.TokenExpireDate = accessToken.Expiration; userUpdateDto.UpdatedUserId = user.Data.Id; вар resultUserUpdateDto = ждут _userService.UpdateAsync(userUpdateDto); вар userDto = _mapper.Map(resultUserUpdateDto.Data); вернуть новый SuccessApiDataResponse(userDto, Messages.LoginSuccessful); } если (user.Data.TokenExpireDate < DateTime.Now) { вар accessToken = _tokenService.CreateToken(user.Data.Id, user.Data.UserName); вар userUpdateDto = _mapper.Map(user.Data); userUpdateDto.Token = accessToken.Token; userUpdateDto.TokenExpireDate = accessToken.Expiration; userUpdateDto.UpdatedUserId = user.Data.Id; вар resultUserUpdateDto = ждут _userService.UpdateAsync(userUpdateDto); вар userDto = _mapper.Map(resultUserUpdateDto.Data); вернуть новый SuccessApiDataResponse(userDto, Messages.LoginSuccessful); } } вернуть новый SuccessApiDataResponse(user.Data, Messages.LoginSuccessful); } } }
Изображение


Когда я пытаюсь войти в API, выдает нулевую ошибку, как на изображении

Поскольку структура представляет собой структуру, в которую я вхожу впервые, мне немного трудно понять логику. Я думаю, что в частях getlist возможна ошибка, но я не смог найти решение, я не смог найти ошибку на стороне сопоставления, я не смог определить, почему она становится нулевой.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»