基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)
2021-02-12 15:18
标签:异常处理 repos 定时 index 第一篇 partial arp 返回 倒序 从本篇就开始博客页面的接口开发了,其实这些接口我是不想用文字来描述的,太枯燥太无趣了。全是CRUD,谁还不会啊,用得着我来讲吗?想想为了不半途而废,为了之前立的Flag,还是咬牙坚持吧。 现在博客数据库中的数据是比较混乱的,为了看起来像那么回事,显得正式一点,我先手动搞点数据进去。 搞定了种子数据,就可以去愉快的写接口了,我这里将根据我现在的博客页面去分析所需要接口,感兴趣的去点点。 为了让接口看起来清晰,一目了然,删掉之前在 在Blog文件夹下依次添加接口: 在Blog/Impl文件夹下添加实现类: 同上, 注意都需要添加partial修饰为局部的接口和实现类,所有文章相关的接口放在 分析:列表带分页,以文章发表的年份分组,所需字段:标题、链接、时间、年份。 在 模型为一个年份和一个文章列表,文章列表模型: 搞定,因为返回时间为英文格式,所以 在 分别实现这两个接口。 在 已经可以查询出数据,并且缓存至Redis中。 分析:文章详情页,文章的标题、作者、发布时间、所属分类、标签列表、文章内容(HTML和MarkDown)、链接、上下篇的标题和链接。 创建返回模型: 同时添加 添加获取文章详情接口和缓存的接口。 分别实现这两个接口。 简单说一下查询逻辑,先根据参数url,查询是否存在数据,如果文章不存在则返回错误消息。 然后根据 联合查询post_tags和tag两张表,指定查询条件post.Id,查询当前文章的所有标签。 最后上下篇的逻辑也很简单,上一篇取大于当前文章发布时间的第一篇,下一篇取时间倒序排序并且小于当前文章发布时间的第一篇文章。 最后将所有查询到的数据赋值给输出对象,返回,结束。 在 编译运行,然后输入URL查询一条文章详情数据。 成功输出预期内容,缓存同时也是ok的。 开源地址:https://github.com/Meowv/Blog/tree/blog_tutorial 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一) 标签:异常处理 repos 定时 index 第一篇 partial arp 返回 倒序 原文地址:https://www.cnblogs.com/meowv/p/12987623.html系列文章
准备工作
IBlogService
中添加的所有接口,将5个自定义仓储全部添加至BlogService
中,然后用partial
修饰。//IBlogService.cs
public partial interface IBlogService
{
}
//BlogService.cs
using Meowv.Blog.Application.Caching.Blog;
using Meowv.Blog.Domain.Blog.Repositories;
namespace Meowv.Blog.Application.Blog.Impl
{
public partial class BlogService : ServiceBase, IBlogService
{
private readonly IBlogCacheService _blogCacheService;
private readonly IPostRepository _postRepository;
private readonly ICategoryRepository _categoryRepository;
private readonly ITagRepository _tagRepository;
private readonly IPostTagRepository _postTagRepository;
private readonly IFriendLinkRepository _friendLinksRepository;
public BlogService(IBlogCacheService blogCacheService,
IPostRepository postRepository,
ICategoryRepository categoryRepository,
ITagRepository tagRepository,
IPostTagRepository postTagRepository,
IFriendLinkRepository friendLinksRepository)
{
_blogCacheService = blogCacheService;
_postRepository = postRepository;
_categoryRepository = categoryRepository;
_tagRepository = tagRepository;
_postTagRepository = postTagRepository;
_friendLinksRepository = friendLinksRepository;
}
}
}
IBlogService.Post.cs
、IBlogService.Category.cs
、IBlogService.Tag.cs
、IBlogService.FriendLink.cs
、IBlogService.Admin.cs
。IBlogService.Post.cs
、BlogService.Category.cs
、BlogService.Tag.cs
、BlogService.FriendLink.cs
、BlogService.Admin.cs
。.Application.Caching
层也按照这个样子添加。IBlogService.Post.cs
中,分类放在IBlogService.Category.cs
,标签放在IBlogService.Tag.cs
,友链放在IBlogService.FriendLink.cs
,后台增删改所有接口放在IBlogService.Admin.cs
,最终效果图如下:文章列表页
.Application.Contracts
层Blog文件夹下添加返回的模型:QueryPostDto.cs
。//QueryPostDto.cs
using System.Collections.Generic;
namespace Meowv.Blog.Application.Contracts.Blog
{
public class QueryPostDto
{
///
PostBriefDto.cs
。//PostBriefDto.cs
namespace Meowv.Blog.Application.Contracts.Blog
{
public class PostBriefDto
{
///
CreationTime
给了字符串类型。IBlogService.Post.cs
中添加接口分页查询文章列表QueryPostsAsync
,肯定需要接受俩参数分页页码和分页数量。还是去添加一个公共模型PagingInput
吧,在.Application.Contracts
下面。//PagingInput.cs
using System.ComponentModel.DataAnnotations;
namespace Meowv.Blog.Application.Contracts
{
///
Page
设置默认值为1,Limit
设置默认值为10,Range Attribute
设置参数可输入大小限制,于是这个分页查询文章列表的接口就是这个样子的。//IBlogService.Post.cs
public partial interface IBlogService
{
///
ServiceResult
和PagedList
是之前添加的统一返回模型,紧接着就去添加一个分页查询文章列表缓存接口,和上面是对应的。//IBlogCacheService.Post.cs
using Meowv.Blog.Application.Contracts;
using Meowv.Blog.Application.Contracts.Blog;
using Meowv.Blog.ToolKits.Base;
using System;
using System.Threading.Tasks;
namespace Meowv.Blog.Application.Caching.Blog
{
public partial interface IBlogCacheService
{
///
//BlogCacheService.Post.cs
public partial class BlogCacheService
{
private const string KEY_QueryPosts = "Blog:Post:QueryPosts-{0}-{1}";
///
//BlogService.Post.cs
///
PageByIndex(...)
、TryToDateTime()
是.ToolKits
层添加的扩展方法,先查询总数,然后根据时间倒序,分页,筛选出所需字段,根据年份分组,输出,结束。BlogController
中添加API。///
[FromQuery]
设置input为从URL进行查询参数,编译运行看效果。获取文章详情
PostDetailDto.cs
//PostDetailDto.cs
using System.Collections.Generic;
namespace Meowv.Blog.Application.Contracts.Blog
{
public class PostDetailDto
{
///
CategoryDto
、TagDto
、PostForPagedDto
。//CategoryDto.cs
namespace Meowv.Blog.Application.Contracts.Blog
{
public class CategoryDto
{
///
//IBlogService.Post.cs
public partial interface IBlogService
{
///
//IBlogCacheService.Post.cs
public partial interface IBlogCacheService
{
///
//BlogCacheService.Post.cs
public partial class BlogCacheService
{
private const string KEY_GetPostDetail = "Blog:Post:GetPostDetail-{0}";
///
//BlogService.Post.cs
///
ResponseText.WHAT_NOT_EXIST
是定义在MeowvBlogConsts.cs
的常量。TryToDateTime()
和列表查询中的扩展方法一样,转换时间为想要的格式。post.CategoryId
就可以查询到当前文章的分类名称。BlogController
中添加API。 ///
上一篇:CSS盒模型(重点)
下一篇:js递归汇总
文章标题:基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)
文章链接:http://soscw.com/index.php/essay/54498.html