刚做的网站怎么搜索不出来的,电子商务网站建设与管理 技能实训,聚星科技过会,梧州房源信息网上一篇文章集成了定时任务处理框架Hangfire#xff0c;完成了一个简单的定时任务处理解决方案。本篇紧接着来玩一下AutoMapper#xff0c;AutoMapper可以很方便的搞定我们对象到对象之间的映射关系处理#xff0c;同时abp也帮我们是现实了IObjectMapper接口#xff0c;先根… 上一篇文章集成了定时任务处理框架Hangfire完成了一个简单的定时任务处理解决方案。本篇紧接着来玩一下AutoMapperAutoMapper可以很方便的搞定我们对象到对象之间的映射关系处理同时abp也帮我们是现实了IObjectMapper接口先根据官方文档https://docs.abp.io/zh-Hans/abp/latest/Object-To-Object-Mapping 将AutoMapper添加依赖到项目中。在.Application层模块类中添加AbpAutoMapperModule模块依赖。//MeowvBlogApplicationModule.cs
using Meowv.Blog.Application.Caching;
using Volo.Abp.AutoMapper;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;namespace Meowv.Blog.Application
{[DependsOn(typeof(AbpIdentityApplicationModule),typeof(AbpAutoMapperModule),typeof(MeowvBlogApplicationCachingModule))]public class MeowvBlogApplicationModule : AbpModule{public override void ConfigureServices(ServiceConfigurationContext context){...}}
}
在本项目中主要处理的就是实体和DTO之前的映射关系以之前写的BlogService.cs中的增删改查为例将Post.cs和PostDto.cs互相映射。先看GetPostAsync(int id)这个方法之前的做法是手动创建对象然后为其一个一个的赋值可以想象当我们的字段超级多的时候都得写一遍。现在有了AutoMapper一句代码就可以搞定。public async TaskServiceResultPostDto GetPostAsync(int id)
{var result new ServiceResultPostDto();var post await _postRepository.GetAsync(id);if (post null){result.IsFailed(文章不存在);return result;}//var dto new PostDto//{// Title post.Title,// Author post.Author,// Url post.Url,// Html post.Html,// Markdown post.Markdown,// CategoryId post.CategoryId,// CreationTime post.CreationTime//};var dto ObjectMapper.MapPost, PostDto(post);result.IsSuccess(dto);return result;
}
ObjectMapper在ApplicationService中已经被注入我们的继承了ServiceBase可以直接使用。到这里还没完其中最重要的一步就是定义类与类之间的映射关系AutoMapper提供了多种定义类之间映射的方法有关详细信息请参阅AutoMapper的文档https://docs.automapper.org/其中定义一种映射的方法是创建一个Profile 类在.Application层添加MeowvBlogAutoMapperProfile.cs直接继承Profile在构造函数中定义即可。//MeowvBlogAutoMapperProfile.cs
using AutoMapper;
using Meowv.Blog.Application.Contracts.Blog;
using Meowv.Blog.Domain.Blog;namespace Meowv.Blog.Application
{public class MeowvBlogAutoMapperProfile : Profile{public MeowvBlogAutoMapperProfile(){CreateMapPost, PostDto();CreateMapPostDto, Post().ForMember(x x.Id, opt opt.Ignore());}}
}
定义两个规则第一个从Post映射到PostDto因为PostDto所有属性在Post中都是存在的所以直接CreateMap即可第二个从PostDto映射到Post因为Post中存在Id属性而在PostDto中是没有的所以可以使用ForMember(...)来忽略掉Id属性。定义好映射规则后在模块类中添加使用。//MeowvBlogApplicationModule.cs
...public override void ConfigureServices(ServiceConfigurationContext context){ConfigureAbpAutoMapperOptions(options {options.AddMapsMeowvBlogApplicationModule(validate: true);options.AddProfileMeowvBlogAutoMapperProfile(validate: true);});}
...
使用同样的方式修改一下InsertPostAsync(PostDto dto)方法的代码。public async TaskServiceResultstring InsertPostAsync(PostDto dto)
{var result new ServiceResultstring();//var entity new Post//{// Title dto.Title,// Author dto.Author,// Url dto.Url,// Html dto.Html,// Markdown dto.Markdown,// CategoryId dto.CategoryId,// CreationTime dto.CreationTime//};var entity ObjectMapper.MapPostDto, Post(dto);var post await _postRepository.InsertAsync(entity);if (post null){result.IsFailed(添加失败);return result;}result.IsSuccess(添加成功);return result;
}
解放了双手代码也变少了真香去测试一下用了对象映射后的接口是否好使。可以看到结果也是可以出来的后续都将按照上面的方法大量用到对象映射。顺便介绍.HttpApi.Hosting层几个配置属性。路由规则配置默认Swagger中的路由是大写的如果我想转成小写可以使用以下配置代码都写在模块类MeowvBlogHttpApiHostingModule.cs中。public override void ConfigureServices(ServiceConfigurationContext context)
{
...context.Services.AddRouting(options {// 设置URL为小写options.LowercaseUrls true;// 在生成的URL后面添加斜杠options.AppendTrailingSlash true;});
...
}
使用HSTS的中间件该中间件添加了严格传输安全头。public override void OnApplicationInitialization(ApplicationInitializationContext context)
{...app.UseHsts();...
}
直接使用默认的跨域配置。public override void OnApplicationInitialization(ApplicationInitializationContext context)
{...app.UseCors();...
}
HTTP请求转HTTPS。public override void OnApplicationInitialization(ApplicationInitializationContext context)
{...app.UseHttpsRedirection();...
}
转发将标头代理到当前请求配合 Nginx 使用获取用户真实IP。public override void OnApplicationInitialization(ApplicationInitializationContext context)
{...pp.UseForwardedHeaders(new ForwardedHeadersOptions{ForwardedHeaders ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto});...
}
本篇介绍了如何使用AutoMapper搞定对象到对象间的映射篇幅简短内容比较简单你学会了吗????????????开源地址https://github.com/Meowv/Blog/tree/blog_tutorial