欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > >内容正文

asp.net

基于 abp vnext 和 .net core 开发博客项目 -凯发k8官方网

发布时间:2025/1/21 14 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 基于 abp vnext 和 .net core 开发博客项目 - 用automapper搞定对象映射 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

基于 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 getpostasync(int id)
{
var result = new serviceresult();

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.map(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()
{
createmap();

createmap().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)
{
configure(options =>
{
options.addmaps(validate: true);
options.addprofile(validate: true);
});
}

使用同样的方式修改一下insertpostasync(postdto dto)方法的代码。

public async task insertpostasync(postdto dto)
{
var result = new serviceresult();

//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.map(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

总结

以上是凯发k8官方网为你收集整理的基于 abp vnext 和 .net core 开发博客项目 - 用automapper搞定对象映射的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图