基于 abp vnext 和 .net core 开发博客项目 -凯发k8官方网
基于 abp vnext 和 .net core 开发博客项目 - 用automapper搞定对象映射
转载于:https://github.com/meowv/blog
本篇紧接着来玩一下automapper,automapper可以很方便的搞定我们对象到对象之间的映射关系处理,同时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 task
{
var result = new serviceresult();
}
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()
{
createmap
}
定义两个规则,第一个:从post映射到postdto,因为postdto所有属性在post中都是存在的,所以直接createmap<>即可;第二个:从postdto映射到post,因为post中存在id属性,而在postdto中是没有的,所以可以使用formember(…)来忽略掉id属性。
定义好映射规则后,在模块类中添加使用。
//meowvblogapplicationmodule.cs
…
public override void configureservices(serviceconfigurationcontext context)
{
configure(options =>
{
options.addmaps(validate: true);
options.addprofile(validate: true);
});
}
…
使用同样的方式修改一下insertpostasync(postdto dto)方法的代码。
public async task
{
var result = new serviceresult();
}
解放了双手,代码也变少了,真香,去测试一下用了对象映射后的接口是否好使。
图片
可以看到,结果也是可以出来的,后续都将按照上面的方法大量用到对象映射。
顺便介绍.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
总结
以上是凯发k8官方网为你收集整理的基于 abp vnext 和 .net core 开发博客项目 - 用automapper搞定对象映射的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 基于 abp vnext 和 .net
- 下一篇: 基于 abp vnext 和 .net