.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     }

 

 

最后测试成功

 

 

 

 

posted on 2023-04-12 16:47  是水饺不是水饺  阅读(27)  评论(0)    收藏  举报

导航