.net core AutoMapper
nuget下载
AutoMapper.Extensions.Microsoft.DependencyInjection
Automapper

这是需要转换的Model项目

1 namespace BBS.Model.Models 2 { 3 /// <summary> 4 /// 文章 5 /// </summary> 6 public class Article :RootEntityTkey<int> 7 { 8 9 /// <summary> 10 /// 标题 11 /// </summary> 12 [DisplayName("标题")] 13 14 public string Title { get; set; } 15 /// <summary> 16 /// 封面 17 /// </summary> 18 [DisplayName("封面")] 19 public string Cover { get; set; } 20 /// <summary> 21 /// 内容 22 /// </summary> 23 [DisplayName("内容")] 24 public string Content { get; set; } 25 /// <summary> 26 /// 类别 27 /// </summary> 28 [DisplayName("类别")] 29 public string Tag { get; set; } 30 /// <summary> 31 /// 访问量 32 /// </summary> 33 [DisplayName("访问量")] 34 public int Traffic { get; set; } 35 /// <summary> 36 /// 创建时间 37 /// </summary> 38 [DisplayName("创建时间")] 39 public DateTime CreateTime { get; set; } 40 /// <summary> 41 /// 创建用户 42 /// </summary> 43 [DisplayName("创建用户")] 44 public int CreateUserId { get; set; } 45 46 } 47 }
建立一个数据传输 DTO 类
1 public class ArticleDto : EntityTKeyDto<int> 2 { 3 /// <summary> 4 /// 标题 5 /// </summary> 6 public string Title { get; set; } 7 /// <summary> 8 /// 封面 9 /// </summary> 10 public string Cover { get; set; } 11 /// <summary> 12 /// 内容 13 /// </summary> 14 public string Content { get; set; } 15 /// <summary> 16 /// 类别 17 /// </summary> 18 public string Tag { get; set; } 19 /// <summary> 20 /// 创建时间 21 /// </summary> 22 public DateTime CreateTime { get; set; } 23 /// <summary> 24 /// 创建用户 25 /// </summary> 26 public int CreateUserId { get; set; } 27 28 29 /// <summary> 30 /// 用户名 31 /// </summary> 32 public string UserName { get; set; } 33 /// <summary> 34 /// 头像 35 /// </summary> 36 public string HeadPortrait { get; set; } 37 38 }
下面是对两个类的对象进行转换的编写
这里我建立了一个Extensions 扩展项目

注意:映射类需要继承 Profile
映射逻辑写在构造函数中
CreateMap<源, 目标> 注意方向
![]()
投影 是目标字段 --> 源字段 的投影,也就是 说 源字段组合好赋值给目标字段

1 public class ArticlePorfile : Profile
2 {
3 public ArticlePorfile()
4 {
5 CreateMap<CreateArticleInputDto, Article>();
6 CreateMap<UpdateArticleInputDto, Article>();
7 CreateMap<Article, ArticleDto>();
8 CreateMap<Article, ArticleDetailsDto>();
9 CreateMap<ArticleComment, ArticleCommentDto>()
10 .ForMember(item => item.HeadPortrait, p => p.MapFrom(t => t.CreateUser.HeadPortrait))
11 .ForMember(item => item.UserName, p => p.MapFrom(t => t.CreateUser.UserName));
12 CreateMap<CreateArticleCommentsInputDto, ArticleComment>();
13 }
14 }
注册这些 Profile 文件

1 public class AutoMapperConfig
2 {
3 public static MapperConfiguration RegisterMappings()
4 {
5 return new MapperConfiguration(config =>
6 {
7 config.AddProfile(new ArticlePorfile());
8 config.AddProfile(new QuestionProfile());
9 config.AddProfile(new UserInfoProfile());
10 });
11 }
12 }
给 IServiceCollection 写个扩展

1 public static class AutoMapperSetup
2 {
3 public static void AddAutoMapperSetup(this IServiceCollection services)
4 {
5 if (services == null) throw new ArgumentNullException(nameof(services));
6 services.AddAutoMapper(typeof(AutoMapperConfig));
7 }
8 }
builder.Services.AddAutoMapperSetup()
1 #region 添加 automapper builder.Services.AddAutoMapperSetup(); #endregion
使用
注入
private readonly IMapper _mapper;
转换
userInfo = _mapper.Map<UserInfo>(input);
1 /// <summary> 2 /// 授权 3 /// </summary> 4 [Route("api/[controller]")] 5 [ApiController] 6 public class AuthController : ControllerBase 7 { 8 private readonly IMapper _mapper; 9 private readonly ILogger<AuthController> _logger; 10 private readonly IBaseServices<UserInfo> _userInfoService; 11 /// <summary> 12 /// 构造函数 13 /// </summary> 14 /// <param name="logger"></param> 15 /// <param name="mapper"></param> 16 /// <param name="userInfoServices"></param> 17 public AuthController(ILogger<AuthController> logger, IMapper mapper, IBaseServices<UserInfo> userInfoServices) 18 { 19 _logger = logger; 20 _mapper = mapper; 21 _userInfoService = userInfoServices; 22 } 23 24 25 /// <summary> 26 /// 登录 27 /// </summary> 28 /// <param name="loginName"></param> 29 /// <param name="loginPassWord"></param> 30 /// <returns></returns> 31 [Route("Login")] 32 [HttpPost] 33 public async Task<MessageModel<string>> LoginAsync(string loginName, string loginPassWord) 34 { 35 string jwtStr = string.Empty; 36 if (string.IsNullOrEmpty(loginName) || string.IsNullOrEmpty(loginPassWord)) 37 { 38 return new MessageModel<string>() 39 { 40 success = false, 41 msg = "用户名或密码不能为空", 42 }; 43 } 44 string passWord = MD5Helper.MD5Encrypt32(loginPassWord); 45 UserInfo userInfo = await _userInfoService.FindAsync(x => x.LoginName == loginName && x.LoginPassWord == passWord); 46 if (userInfo == null) 47 { 48 return new MessageModel<string>() 49 { 50 success = false, 51 msg = "认证失败", 52 }; 53 } 54 jwtStr = GetUserJwt(userInfo); 55 56 return new MessageModel<string>() 57 { 58 success = true, 59 msg = "获取成功", 60 resresponse = jwtStr 61 }; 62 } 63 64 /// <summary> 65 /// 注册 66 /// </summary> 67 /// <returns></returns> 68 [Route("Register")] 69 [HttpPost] 70 public async Task<MessageModel<string>> RegisterAsync(CreateUserInfoInputDto input) 71 { 72 UserInfo userInfo = await _userInfoService.FindAsync(item => item.LoginName == input.LoginName); 73 if (userInfo != null) 74 { 75 return new MessageModel<string>() 76 { 77 success = false, 78 msg = "账号已存在", 79 }; 80 } 81 userInfo = await _userInfoService.FindAsync(x => x.Email == input.Email); 82 if (userInfo != null) 83 { 84 return new MessageModel<string>() 85 { 86 success = false, 87 msg = "邮箱已存在", 88 }; 89 } 90 91 userInfo = await _userInfoService.FindAsync(x => x.Phone == input.Phone); 92 if (userInfo != null) 93 { 94 return new MessageModel<string>() 95 { 96 success = false, 97 msg = "手机号已注册", 98 }; 99 } 100 101 userInfo = await _userInfoService.FindAsync(x => x.UserName == input.UserName); 102 if (userInfo != null) 103 { 104 return new MessageModel<string>() 105 { 106 success = false, 107 msg = "用户名已存在", 108 }; 109 } 110 input.LoginPassWord = MD5Helper.MD5Encrypt32(input.LoginPassWord); 111 userInfo = _mapper.Map<UserInfo>(input); 112 await _userInfoService.InsertAsync(userInfo, true); 113 string jwtStr = GetUserJwt(userInfo); 114 return new MessageModel<string>() 115 { 116 success = true, 117 msg = "注册成功", 118 resresponse = jwtStr 119 }; 120 } 121 122 /// <summary> 123 /// 获取token 124 /// </summary> 125 /// <param name="userInfo"></param> 126 /// <returns></returns> 127 private string GetUserJwt(UserInfo userInfo) 128 { 129 return JwtHepler.IssueJwt(new TokenModelJwt { Id = userInfo.Id, Role = "user" }); 130 } 131 }
最后测试成功


浙公网安备 33010602011771号