我正在开发一个电子商务网站。我正在使用实体框架和 Web api,因此我正在创建一个用户层。
这是我的实体层
namespace Core.DataAccess.EntityFramework
{
public class EfBaseRepository<TEntity, TContext> : IBaseRepository<TEntity>
where TEntity : class, IEntity, new()
where TContext : DbContext, new()
{
public async Task<TEntity> AddAsync(TEntity entity)
{
using (TContext context = new TContext())
{
await context.Set<TEntity>().AddAsync(entity);
await context.SaveChangesAsync();
return entity;
}
}
public async Task<bool> DeleteAsync(int id)
{
using (TContext context = new TContext())
{
var deleteEntity = await context.Set<TEntity>().FindAsync(id);
context.Set<TEntity>().Remove(deleteEntity);
var data = await context.SaveChangesAsync();
if (data > 0)
return true;
return false;
}
}
public async Task<TEntity> GetAsync(Expression<Func<TEntity, bool>> filter)
{
using (TContext context = new TContext())
{
return await context.Set<TEntity>().SingleOrDefaultAsync(filter);
}
}
public async Task<IEnumerable<TEntity>> GetListAsync(Expression<Func<TEntity, bool>> filter = null)
{
using (TContext context = new TContext())
{
return filter == null
? await context.Set<TEntity>().ToListAsync() :
await context.Set<TEntity>().Where(filter).ToListAsync();
}
}
public async Task<TEntity> UpdateAsync(TEntity entity)
{
using (TContext context = new TContext())
{
context.Set<TEntity>().Update(entity);
await context.SaveChangesAsync();
return entity;
}
}
}
}
这是用户控制器
namespace Bussines.Concrete
{
public class UserService : IUserService
{
private readonly IUserDal _userDal;
AppSettings _appSettings;
IMapper _mapper;
public UserService(IUserDal userDal, IOptions<AppSettings> appSettings, IMapper mapper)
{
_userDal = userDal;
_appSettings = appSettings.Value;
_mapper = mapper;
}
public async Task<ApiDataResponse<UserDto>> AddAsync(UserAddDto userAddDto)
{
var user = _mapper.Map<User>(userAddDto);
user.CreatedDate = DateTime.UtcNow;
user.CreatedUserId = 1;
var userAdd = await _userDal.AddAsync(user);
var userDto = _mapper.Map<UserDto>(userAdd);
return new SuccessApiDataResponse<UserDto>(userDto, Messages.Added);
}
public async Task<ApiDataResponse<bool>> DeleteAsync(int id)
{
return new SuccessApiDataResponse<bool>(await _userDal.DeleteAsync(id), Messages.Deleted);
}
public async Task<ApiDataResponse<UserDto>> GetByIdAsync(int id)
{
var user = await _userDal.GetAsync(x => x.Id == id);
if (user != null)
{
var userDto = _mapper.Map<UserDto>(user);
return new SuccessApiDataResponse<UserDto>(userDto, Messages.Listed);
}
return new ErrorApiDataResponse<UserDto>(null, Messages.NotListed);
}
public async Task<ApiDataResponse<IEnumerable<UserDetailDto>>> GetListAsync(Expression<Func<User, bool>> filter = null)
{
if (filter == null)
{
var response = await _userDal.GetListAsync();
var userDetailDtos = _mapper.Map<IEnumerable<UserDetailDto>>(response);
return new SuccessApiDataResponse<IEnumerable<UserDetailDto>>(userDetailDtos, Messages.Listed);
}
else
{
var response = await _userDal.GetListAsync(filter);
var userDetailDtos = _mapper.Map<IEnumerable<UserDetailDto>>(response);
return new SuccessApiDataResponse<IEnumerable<UserDetailDto>>(userDetailDtos, Messages.Listed);
}
}
public async Task<ApiDataResponse<UserDto>> GetAsync(Expression<Func<User, bool>> filter = null)
{
var user = await _userDal.GetAsync(filter);
if (user!= null)
{
var userDto= _mapper.Map<UserDto>(user);
return new SuccessApiDataResponse<UserDto>(userDto, Messages.Listed);
}
return new ErrorApiDataResponse<UserDto>(null, Messages.NotListed);
}
public async Task<ApiDataResponse<UserUpdateDto>> UpdateAsync(UserUpdateDto userUpdateDto)
{
var getUser = await _userDal.GetAsync(x => x.Id == userUpdateDto.Id);
var user = _mapper.Map<User>(userUpdateDto);
user.CreatedDate = getUser.CreatedDate;
user.CreatedUserId = getUser.CreatedUserId;
user.UpdatedDate = DateTime.Now;
user.UpdatedUserId = 1;
user.Token = userUpdateDto.Token;
user.TokenExpireDate = userUpdateDto.TokenExpireDate;
var resultUpdate = await _userDal.UpdateAsync(user);
var userUpdateMap = _mapper.Map<UserUpdateDto>(resultUpdate);
return new SuccessApiDataResponse<UserUpdateDto>(userUpdateMap, Messages.Updated);
}
}
}
这是我使用身份验证控制器登录的控制器
namespace Bussines.Concrete
{
public class AuthService : IAuthService
{
private IUserService _userService;
private ITokenService _tokenService;
private IMapper _mapper;
public AuthService(IUserService userService, ITokenService tokenService, IMapper mapper)
{
_userService = userService;
_tokenService = tokenService;
_mapper = mapper;
}
public async Task<ApiDataResponse<UserDto>> LoginAsync(LoginDto loginDto)
{
var user = await _userService.GetAsync(x => x.UserName == loginDto.UserName && x.Password == loginDto.Password);
if (user == null)
{
return new ErrorApiDataResponse<UserDto>(null, Messages.UserNotFound);
}
else
{
if (user.Data.TokenExpireDate == null || String.IsNullOrEmpty(user.Data.Token))
{
var accessToken = _tokenService.CreateToken(user.Data.Id, user.Data.UserName);
var userUpdateDto = _mapper.Map<UserUpdateDto>(user.Data);
userUpdateDto.Token = accessToken.Token;
userUpdateDto.TokenExpireDate = accessToken.Expiration;
userUpdateDto.UpdatedUserId = user.Data.Id;
var resultUserUpdateDto = await _userService.UpdateAsync(userUpdateDto);
var userDto = _mapper.Map<UserDto>(resultUserUpdateDto.Data);
return new SuccessApiDataResponse<UserDto>(userDto, Messages.LoginSuccessful);
}
if (user.Data.TokenExpireDate < DateTime.Now)
{
var accessToken = _tokenService.CreateToken(user.Data.Id, user.Data.UserName);
var userUpdateDto = _mapper.Map<UserUpdateDto>(user.Data);
userUpdateDto.Token = accessToken.Token;
userUpdateDto.TokenExpireDate = accessToken.Expiration;
userUpdateDto.UpdatedUserId = user.Data.Id;
var resultUserUpdateDto = await _userService.UpdateAsync(userUpdateDto);
var userDto = _mapper.Map<UserDto>(resultUserUpdateDto.Data);
return new SuccessApiDataResponse<UserDto>(userDto, Messages.LoginSuccessful);
}
}
return new SuccessApiDataResponse<UserDto>(user.Data, Messages.LoginSuccessful);
}
}
}
当我尝试登录 api 时,它给出了如图所示的 null 错误
由于该结构是我第一次进入的结构,所以我对逻辑的把握有点困难。我认为 getlist 部分可能存在错误,但我找不到解决方案,我找不到映射端的错误,我无法确定它为何为空。
你的UserDto是什么?因为你的get方法是由userDto映射的。你是 dto 的 hava 数据支柱吗?