欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > >内容正文

asp.net

基于 abp vnext 和 .net core 开发博客项目 -凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 20 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 基于 abp vnext 和 .net core 开发博客项目 - 博客接口实战篇(五) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

基于 abp vnext 和 .net core 开发博客项目 - 博客接口实战篇(五)

转载于:https://github.com/meowv/blog

上篇文章完成了文章详情页数据查询和清除缓存的功能。

本篇继续完成分类、标签、凯发ag旗舰厅登录网址下载的友情链接的后台操作接口,还是那句话,这些纯crud的内容,建议还是自己动手完成比较好,本篇将不再啰嗦,直接贴代码,以供参考。

分类

添加接口:查询分类列表querycategoriesforadminasync()、新增分类insertcategoryasync(…)、更新分类updatecategoryasync(…)、删除分类deletecategoryasync(…)

#region categories

///
/// 查询分类列表
///
///
task> querycategoriesforadminasync();

///
/// 新增分类
///
///
///
task insertcategoryasync(editcategoryinput input);

///
/// 更新分类
///
///
///
///
task updatecategoryasync(int id, editcategoryinput input);

///
/// 删除分类
///
///
///
task deletecategoryasync(int id);

#endregion categories
查询分类列表需要返回的模型类querycategoryforadmindto.cs。

//querycategoryforadmindto.cs
namespace meowv.blog.application.contracts.blog
{
public class querycategoryforadmindto : querycategorydto
{
///
/// 主键
///
public int id { get; set; }
}
}
新增分类和更新分类需要的输入参数editcategoryinput.cs,直接继承categorydto即可。

//editcategoryinput.cs
namespace meowv.blog.application.contracts.blog.params
{
public class editcategoryinput : categorydto
{
}
}
分别实现这几个接口。

///
/// 查询分类列表
///
///
public async task> querycategoriesforadminasync()
{
var result = new serviceresult();

var posts = await _postrepository.getlistasync();var categories = _categoryrepository.getlistasync().result.select(x => new querycategoryforadmindto {id = x.id,categoryname = x.categoryname,displayname = x.displayname,count = posts.count(p => p.categoryid == x.id) });result.issuccess(categories); return result;

}
///
/// 新增分类
///
///
///
public async task insertcategoryasync(editcategoryinput input)
{
var result = new serviceresult();

var category = objectmapper.map(input); await _categoryrepository.insertasync(category);result.issuccess(responsetext.insert_success); return result;

}
这里需要一条automapper配置,将editcategoryinput转换为category,忽略id字段。

createmap().formember(x => x.id, opt => opt.ignore());
///
/// 更新分类
///
///
///
///
public async task updatecategoryasync(int id, editcategoryinput input)
{
var result = new serviceresult();

var category = await _categoryrepository.getasync(id); category.categoryname = input.categoryname; category.displayname = input.displayname;await _categoryrepository.updateasync(category);result.issuccess(responsetext.update_success); return result;

}
///
/// 删除分类
///
///
///
public async task deletecategoryasync(int id)
{
var result = new serviceresult();

var category = await _categoryrepository.findasync(id); if (null == category) {result.isfailed(responsetext.what_not_exist.formatwith("id", id));return result; }await _categoryrepository.deleteasync(id);result.issuccess(responsetext.delete_success); return result;

}
在blogcontroller.admin.cs中添加接口。

#region categories

///
/// 查询分类列表
///
///
[httpget]
[authorize]
[route(“admin/categories”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task> querycategoriesforadminasync()
{
return await _blogservice.querycategoriesforadminasync();
}

///
/// 新增分类
///
///
///
[httppost]
[authorize]
[route(“category”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task insertcategoryasync([frombody] editcategoryinput input)
{
return await _blogservice.insertcategoryasync(input);
}

///
/// 更新分类
///
///
///
///
[httpput]
[authorize]
[route(“category”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task updatecategoryasync([required] int id, [frombody] editcategoryinput input)
{
return await _blogservice.updatecategoryasync(id, input);
}

///
/// 删除分类
///
///
///
[httpdelete]
[authorize]
[route(“category”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task deletecategoryasync([required] int id)
{
return await _blogservice.deletecategoryasync(id);
}

#endregion categories

图片

标签

添加接口:查询标签列表querytagsforadminasync()、新增标签inserttagasync(…)、更新标签updatetagasync(…)、删除标签deletetagasync(…)

#region tags

///
/// 查询标签列表
///
///
task> querytagsforadminasync();

///
/// 新增标签
///
///
///
task inserttagasync(edittaginput input);

///
/// 更新标签
///
///
///
///
task updatetagasync(int id, edittaginput input);

///
/// 删除标签
///
///
///
task deletetagasync(int id);

#endregion tags
查询标签列表需要返回的模型类querytagforadmindto.cs。

//querytagforadmindto.cs
namespace meowv.blog.application.contracts.blog
{
public class querytagforadmindto : querytagdto
{
///
/// 主键
///
public int id { get; set; }
}
}
新增标签和更新标签需要的输入参数edittaginput.cs,直接继承tagdto即可。

//edittaginput.cs
namespace meowv.blog.application.contracts.blog.params
{
public class edittaginput : tagdto
{
}
}
分别实现这几个接口。

///
/// 查询标签列表
///
///
public async task> querytagsforadminasync()
{
var result = new serviceresult();

var post_tags = await _posttagrepository.getlistasync();var tags = _tagrepository.getlistasync().result.select(x => new querytagforadmindto {id = x.id,tagname = x.tagname,displayname = x.displayname,count = post_tags.count(p => p.tagid == x.id) });result.issuccess(tags); return result;

}

///
/// 新增标签
///
///
///
public async task inserttagasync(edittaginput input)
{
var result = new serviceresult();

var tag = objectmapper.map(input); await _tagrepository.insertasync(tag);result.issuccess(responsetext.insert_success); return result;

}
这里需要一条automapper配置,将editcategoryinput转换为tag,忽略id字段。

createmap().formember(x => x.id, opt => opt.ignore());

///
/// 更新标签
///
///
///
///
public async task updatetagasync(int id, edittaginput input)
{
var result = new serviceresult();

var tag = await _tagrepository.getasync(id); tag.tagname = input.tagname; tag.displayname = input.displayname;await _tagrepository.updateasync(tag);result.issuccess(responsetext.update_success); return result;

}
///
/// 删除标签
///
///
///
public async task deletetagasync(int id)
{
var result = new serviceresult();

var tag = await _tagrepository.findasync(id); if (null == tag) {result.isfailed(responsetext.what_not_exist.formatwith("id", id));return result; }await _tagrepository.deleteasync(id); await _posttagrepository.deleteasync(x => x.tagid == id);result.issuccess(responsetext.delete_success); return result;

}
在blogcontroller.admin.cs中添加接口。

#region tags

///
/// 查询标签列表
///
///
[httpget]
[authorize]
[route(“admin/tags”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task> querytagsforadminasync()
{
return await _blogservice.querytagsforadminasync();
}

///
/// 新增标签
///
///
///
[httppost]
[authorize]
[route(“tag”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task inserttagasync([frombody] edittaginput input)
{
return await _blogservice.inserttagasync(input);
}

///
/// 更新标签
///
///
///
///
[httpput]
[authorize]
[route(“tag”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task updatetagasync([required] int id, [frombody] edittaginput input)
{
return await _blogservice.updatetagasync(id, input);
}

///
/// 删除标签
///
///
///
[httpdelete]
[authorize]
[route(“tag”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task deletetagasync([required] int id)
{
return await _blogservice.deletetagasync(id);
}

#endregion tags

图片

友链

添加接口:查询友链列表queryfriendlinksforadminasync()、新增友链insertfriendlinkasync(…)、更新友链updatefriendlinkasync(…)、删除友链deletefriendlinkasync(…)

#region friendlinks

///
/// 查询友链列表
///
///
task> queryfriendlinksforadminasync();

///
/// 新增友链
///
///
///
task insertfriendlinkasync(editfriendlinkinput input);

///
/// 更新友链
///
///
///
///
task updatefriendlinkasync(int id, editfriendlinkinput input);

///
/// 删除友链
///
///
///
task deletefriendlinkasync(int id);

#endregion friendlinks
查询友链列表需要返回的模型类queryfriendlinkforadmindto.cs。

//queryfriendlinkforadmindto.cs
namespace meowv.blog.application.contracts.blog
{
public class queryfriendlinkforadmindto : friendlinkdto
{
///
/// 主键
///
public int id { get; set; }
}
}
新增友链和更新友链需要的输入参数editfriendlinkinput.cs,直接继承friendlinkdto即可。

//editfriendlinkinput .cs
namespace meowv.blog.application.contracts.blog.params
{
public class editfriendlinkinput : friendlinkdto
{
}
}
分别实现这几个接口。

///
/// 查询友链列表
///
///
public async task> queryfriendlinksforadminasync()
{
var result = new serviceresult();

var friendlinks = await _friendlinksrepository.getlistasync();var dto = objectmapper.map, ienumerable>(friendlinks);result.issuccess(dto); return result;

}

///
/// 新增友链
///
///
///
public async task insertfriendlinkasync(editfriendlinkinput input)
{
var result = new serviceresult();

var friendlink = objectmapper.map(input); await _friendlinksrepository.insertasync(friendlink);// 执行清除缓存操作 await _blogcacheservice.removeasync(cacheprefix.blog_friendlink);result.issuccess(responsetext.insert_success); return result;

}
///
/// 更新友链
///
///
///
///
public async task updatefriendlinkasync(int id, editfriendlinkinput input)
{
var result = new serviceresult();

var friendlink = await _friendlinksrepository.getasync(id); friendlink.title = input.title; friendlink.linkurl = input.linkurl;await _friendlinksrepository.updateasync(friendlink);// 执行清除缓存操作 await _blogcacheservice.removeasync(cacheprefix.blog_friendlink);result.issuccess(responsetext.update_success); return result;

}
///
/// 删除友链
///
///
///
public async task deletefriendlinkasync(int id)
{
var result = new serviceresult();

var friendlink = await _friendlinksrepository.findasync(id); if (null == friendlink) {result.isfailed(responsetext.what_not_exist.formatwith("id", id));return result; }await _friendlinksrepository.deleteasync(id);// 执行清除缓存操作 await _blogcacheservice.removeasync(cacheprefix.blog_friendlink);result.issuccess(responsetext.delete_success); return result;

}
其中查询友链列表和新增友链中有两条automapper配置。

createmap();

createmap().formember(x => x.id, opt => opt.ignore());
在blogcontroller.admin.cs中添加接口。

#region friendlinks

///
/// 查询友链列表
///
///
[httpget]
[authorize]
[route(“admin/friendlinks”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task> queryfriendlinksforadminasync()
{
return await _blogservice.queryfriendlinksforadminasync();
}

///
/// 新增友链
///
///
///
[httppost]
[authorize]
[route(“friendlink”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task insertfriendlinkasync([frombody] editfriendlinkinput input)
{
return await _blogservice.insertfriendlinkasync(input);
}

///
/// 更新友链
///
///
///
///
[httpput]
[authorize]
[route(“friendlink”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task updatefriendlinkasync([required] int id, [frombody] editfriendlinkinput input)
{
return await _blogservice.updatefriendlinkasync(id, input);
}

///
/// 删除友链
///
///
///
[httpdelete]
[authorize]
[route(“friendlink”)]
[apiexplorersettings(groupname = grouping.groupname_v2)]
public async task deletefriendlinkasync([required] int id)
{
return await _blogservice.deletefriendlinkasync(id);
}

#endregion

图片

next

截止本篇,基于 abp vnext 和 .net core 开发博客项目 系列的后台api部分便全部开发完成了。

本博客项目系列是我一边写代码一边记录后的成果,并不是开发完成后再拿出来写的,涉及到东西也不是很多,对于新手入门来说应该是够了的,如果你从中有所收获请多多转发分享。

在此,希望大家可以关注一下我的微信公众号:『阿星plus』,文章将会首发在公众号中。

现在有了api,大家可以选择自己熟悉的方式去开发前端界面,比如目前我博客的线上版本就是用的 asp.net core web ,感兴趣的可以去 release 分支查看。

关于前端部分,看到有人呼吁vue,说实话前端技术不是很厉害,本职主要是后端开发,可能达不到预期效果。

所以我准备入坑 blazor 😂,接下来就现学现卖吧,一起学习一起做项目一起进步,加油💪

开源地址:https://github.com/meowv/blog/tree/blog_tutorial

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的基于 abp vnext 和 .net core 开发博客项目 - 博客接口实战篇(五)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

网站地图