当前位置: 首页 > news >正文

最好网站开发公司深圳南头高端网站建设

最好网站开发公司,深圳南头高端网站建设,长春是几线城市2020,皮革 东莞网站建设系列文章使用 abp cli 搭建项目给项目瘦身#xff0c;让它跑起来完善与美化#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API#xff0c;包装返回模型再说Swagger#xff0c;分组、描述、小绿锁接入GitHub#xff0c;用JWT保护你的API异常处理和… 系列文章使用 abp cli 搭建项目给项目瘦身让它跑起来完善与美化Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API包装返回模型再说Swagger分组、描述、小绿锁接入GitHub用JWT保护你的API异常处理和日志记录使用Redis缓存数据集成Hangfire实现定时任务处理用AutoMapper搞定对象映射定时任务最佳实战一定时任务最佳实战二定时任务最佳实战三博客接口实战篇一博客接口实战篇二博客接口实战篇三博客接口实战篇四上篇文章完成了文章详情页数据查询和清除缓存的功能。本篇继续完成分类、标签、友情链接的后台操作接口还是那句话这些纯CRUD的内容建议还是自己动手完成比较好本篇将不再啰嗦直接贴代码以供参考。分类添加接口查询分类列表QueryCategoriesForAdminAsync()、新增分类InsertCategoryAsync(...)、更新分类UpdateCategoryAsync(...)、删除分类DeleteCategoryAsync(...)#region Categories/// summary /// 查询分类列表 /// /summary /// returns/returns TaskServiceResultIEnumerableQueryCategoryForAdminDto QueryCategoriesForAdminAsync();/// summary /// 新增分类 /// /summary /// param nameinput/param /// returns/returns TaskServiceResult InsertCategoryAsync(EditCategoryInput input);/// summary /// 更新分类 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns TaskServiceResult UpdateCategoryAsync(int id, EditCategoryInput input);/// summary /// 删除分类 /// /summary /// param nameid/param /// returns/returns TaskServiceResult DeleteCategoryAsync(int id);#endregion Categories 查询分类列表需要返回的模型类QueryCategoryForAdminDto.cs。//QueryCategoryForAdminDto.cs namespace Meowv.Blog.Application.Contracts.Blog {public class QueryCategoryForAdminDto : QueryCategoryDto{/// summary/// 主键/// /summarypublic int Id { get; set; }} } 新增分类和更新分类需要的输入参数EditCategoryInput.cs直接继承CategoryDto即可。//EditCategoryInput.cs namespace Meowv.Blog.Application.Contracts.Blog.Params {public class EditCategoryInput : CategoryDto{} } 分别实现这几个接口。/// summary /// 查询分类列表 /// /summary /// returns/returns public async TaskServiceResultIEnumerableQueryCategoryForAdminDto QueryCategoriesForAdminAsync() {var result new ServiceResultIEnumerableQueryCategoryForAdminDto();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; } /// summary /// 新增分类 /// /summary /// param nameinput/param /// returns/returns public async TaskServiceResult InsertCategoryAsync(EditCategoryInput input) {var result new ServiceResult();var category ObjectMapper.MapEditCategoryInput, Category(input);await _categoryRepository.InsertAsync(category);result.IsSuccess(ResponseText.INSERT_SUCCESS);return result; } 这里需要一条AutoMapper配置将EditCategoryInput转换为Category忽略Id字段。CreateMapEditCategoryInput, Category().ForMember(x x.Id, opt opt.Ignore()); /// summary /// 更新分类 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns public async TaskServiceResult 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; } /// summary /// 删除分类 /// /summary /// param nameid/param /// returns/returns public async TaskServiceResult 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/// summary /// 查询分类列表 /// /summary /// returns/returns [HttpGet] [Authorize] [Route(admin/categories)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResultIEnumerableQueryCategoryForAdminDto QueryCategoriesForAdminAsync() {return await _blogService.QueryCategoriesForAdminAsync(); }/// summary /// 新增分类 /// /summary /// param nameinput/param /// returns/returns [HttpPost] [Authorize] [Route(category)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult InsertCategoryAsync([FromBody] EditCategoryInput input) {return await _blogService.InsertCategoryAsync(input); }/// summary /// 更新分类 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns [HttpPut] [Authorize] [Route(category)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult UpdateCategoryAsync([Required] int id, [FromBody] EditCategoryInput input) {return await _blogService.UpdateCategoryAsync(id, input); }/// summary /// 删除分类 /// /summary /// param nameid/param /// returns/returns [HttpDelete] [Authorize] [Route(category)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult DeleteCategoryAsync([Required] int id) {return await _blogService.DeleteCategoryAsync(id); }#endregion Categories 标签添加接口查询标签列表QueryTagsForAdminAsync()、新增标签InsertTagAsync(...)、更新标签UpdateTagAsync(...)、删除标签DeleteTagAsync(...)#region Tags/// summary /// 查询标签列表 /// /summary /// returns/returns TaskServiceResultIEnumerableQueryTagForAdminDto QueryTagsForAdminAsync();/// summary /// 新增标签 /// /summary /// param nameinput/param /// returns/returns TaskServiceResult InsertTagAsync(EditTagInput input);/// summary /// 更新标签 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns TaskServiceResult UpdateTagAsync(int id, EditTagInput input);/// summary /// 删除标签 /// /summary /// param nameid/param /// returns/returns TaskServiceResult DeleteTagAsync(int id);#endregion Tags 查询标签列表需要返回的模型类QueryTagForAdminDto.cs。//QueryTagForAdminDto.cs namespace Meowv.Blog.Application.Contracts.Blog {public class QueryTagForAdminDto : QueryTagDto{/// summary/// 主键/// /summarypublic int Id { get; set; }} } 新增标签和更新标签需要的输入参数EditTagInput.cs直接继承TagDto即可。//EditTagInput.cs namespace Meowv.Blog.Application.Contracts.Blog.Params {public class EditTagInput : TagDto{} } 分别实现这几个接口。/// summary /// 查询标签列表 /// /summary /// returns/returns public async TaskServiceResultIEnumerableQueryTagForAdminDto QueryTagsForAdminAsync() {var result new ServiceResultIEnumerableQueryTagForAdminDto();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; } /// summary /// 新增标签 /// /summary /// param namedto/param /// returns/returns public async TaskServiceResult InsertTagAsync(EditTagInput input) {var result new ServiceResult();var tag ObjectMapper.MapEditTagInput, Tag(input);await _tagRepository.InsertAsync(tag);result.IsSuccess(ResponseText.INSERT_SUCCESS);return result; } 这里需要一条AutoMapper配置将EditCategoryInput转换为Tag忽略Id字段。CreateMapEditTagInput, Tag().ForMember(x x.Id, opt opt.Ignore()); /// summary /// 更新标签 /// /summary /// param nameid/param /// param namedto/param /// returns/returns public async TaskServiceResult 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; } /// summary /// 删除标签 /// /summary /// param nameid/param /// returns/returns public async TaskServiceResult 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/// summary /// 查询标签列表 /// /summary /// returns/returns [HttpGet] [Authorize] [Route(admin/tags)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResultIEnumerableQueryTagForAdminDto QueryTagsForAdminAsync() {return await _blogService.QueryTagsForAdminAsync(); }/// summary /// 新增标签 /// /summary /// param nameinput/param /// returns/returns [HttpPost] [Authorize] [Route(tag)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult InsertTagAsync([FromBody] EditTagInput input) {return await _blogService.InsertTagAsync(input); }/// summary /// 更新标签 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns [HttpPut] [Authorize] [Route(tag)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult UpdateTagAsync([Required] int id, [FromBody] EditTagInput input) {return await _blogService.UpdateTagAsync(id, input); }/// summary /// 删除标签 /// /summary /// param nameid/param /// returns/returns [HttpDelete] [Authorize] [Route(tag)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult DeleteTagAsync([Required] int id) {return await _blogService.DeleteTagAsync(id); }#endregion Tags 友链添加接口查询友链列表QueryFriendLinksForAdminAsync()、新增友链InsertFriendLinkAsync(...)、更新友链UpdateFriendLinkAsync(...)、删除友链DeleteFriendLinkAsync(...)#region FriendLinks/// summary /// 查询友链列表 /// /summary /// returns/returns TaskServiceResultIEnumerableQueryFriendLinkForAdminDto QueryFriendLinksForAdminAsync();/// summary /// 新增友链 /// /summary /// param nameinput/param /// returns/returns TaskServiceResult InsertFriendLinkAsync(EditFriendLinkInput input);/// summary /// 更新友链 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns TaskServiceResult UpdateFriendLinkAsync(int id, EditFriendLinkInput input);/// summary /// 删除友链 /// /summary /// param nameid/param /// returns/returns TaskServiceResult DeleteFriendLinkAsync(int id);#endregion FriendLinks 查询友链列表需要返回的模型类QueryFriendLinkForAdminDto.cs。//QueryFriendLinkForAdminDto.cs namespace Meowv.Blog.Application.Contracts.Blog {public class QueryFriendLinkForAdminDto : FriendLinkDto{/// summary/// 主键/// /summarypublic int Id { get; set; }} } 新增友链和更新友链需要的输入参数EditFriendLinkInput.cs直接继承FriendLinkDto即可。//EditFriendLinkInput .cs namespace Meowv.Blog.Application.Contracts.Blog.Params {public class EditFriendLinkInput : FriendLinkDto{} } 分别实现这几个接口。/// summary /// 查询友链列表 /// /summary /// returns/returns public async TaskServiceResultIEnumerableQueryFriendLinkForAdminDto QueryFriendLinksForAdminAsync() {var result new ServiceResultIEnumerableQueryFriendLinkForAdminDto();var friendLinks await _friendLinksRepository.GetListAsync();var dto ObjectMapper.MapListFriendLink, IEnumerableQueryFriendLinkForAdminDto(friendLinks);result.IsSuccess(dto);return result; } /// summary /// 新增友链 /// /summary /// param nameinput/param /// returns/returns public async TaskServiceResult InsertFriendLinkAsync(EditFriendLinkInput input) {var result new ServiceResult();var friendLink ObjectMapper.MapEditFriendLinkInput, FriendLink(input);await _friendLinksRepository.InsertAsync(friendLink);// 执行清除缓存操作await _blogCacheService.RemoveAsync(CachePrefix.Blog_FriendLink);result.IsSuccess(ResponseText.INSERT_SUCCESS);return result; } /// summary /// 更新友链 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns public async TaskServiceResult 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; } /// summary /// 删除友链 /// /summary /// param nameid/param /// returns/returns public async TaskServiceResult 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配置。CreateMapFriendLink, QueryFriendLinkForAdminDto();CreateMapEditFriendLinkInput, FriendLink().ForMember(x x.Id, opt opt.Ignore()); 在BlogController.Admin.cs中添加接口。#region FriendLinks/// summary /// 查询友链列表 /// /summary /// returns/returns [HttpGet] [Authorize] [Route(admin/friendlinks)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResultIEnumerableQueryFriendLinkForAdminDto QueryFriendLinksForAdminAsync() {return await _blogService.QueryFriendLinksForAdminAsync(); }/// summary /// 新增友链 /// /summary /// param nameinput/param /// returns/returns [HttpPost] [Authorize] [Route(friendlink)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult InsertFriendLinkAsync([FromBody] EditFriendLinkInput input) {return await _blogService.InsertFriendLinkAsync(input); }/// summary /// 更新友链 /// /summary /// param nameid/param /// param nameinput/param /// returns/returns [HttpPut] [Authorize] [Route(friendlink)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult UpdateFriendLinkAsync([Required] int id, [FromBody] EditFriendLinkInput input) {return await _blogService.UpdateFriendLinkAsync(id, input); }/// summary /// 删除友链 /// /summary /// param nameid/param /// returns/returns [HttpDelete] [Authorize] [Route(friendlink)] [ApiExplorerSettings(GroupName Grouping.GroupName_v2)] public async TaskServiceResult 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搭配下方课程学习更佳 ↓ ↓ ↓
http://www.pierceye.com/news/561090/

相关文章:

  • 社区网站制作教程社交媒体营销
  • 云南省建设工程质量监督管理站网站房产网站推广
  • 做网站挣钱吗营销导向的企业网站建设步骤
  • 优化网站 优帮云网站是意识形态建设
  • 网站内容建设运维服务wordpress envato主题
  • 响应式网站的几种尺寸推广网站的几种方法
  • php 打开网站东莞网站建设网页推广
  • 正品海外购网站有哪些公司网站开发费用兴田德润在哪儿
  • 怎样做编辑发到网站自由建网站的网络程序
  • 网站开发 卡片cms建站系统 下载
  • 新浪门户网站是谁做的科技网站建设
  • 免费网站建设合同书山西网站建设企业
  • 网站建设空间什么意思学做网站什么语言合适
  • 网站开发的形式有( )友情链接英文
  • 帝国网站管理系统前台免费photoshop下载
  • 深圳一百讯网站建设wordpress汉化包
  • 建设一个班级网站的具体步骤自己的网站源代码一片空白
  • 初创公司 建网站wordpress 模板获取数据库
  • 怎么在网站做推广不要钱六安网约车平台
  • 申晨推荐的营销网站做卖挖掘机的网站
  • 网站广告牌制作教程来几个好看的网站
  • php企业网站源码蓝色印度喜欢用什么框架做外贸网站
  • 网站建设教程最新资讯wordpress说说伪静态
  • 长春建站程序网络营销推广方法脑24金手指效率高
  • 专门做房地产设计的图片网站在安徽省住房和城乡建设厅网站
  • 怎样制作图片网站广告制作公司电话
  • 电子商城网站开发教程湖北网站建设路
  • 广告公司网站模版快速seo关键词优化技巧
  • whois哪个网站好WordPress判断文章形式
  • 昆明网站建设排名网站推广营销策划方案