跳到主要内容

文章与内容

文章(Article)是 CmsKit 的核心长内容形态:Markdown 正文、分类(Classify)、频道(Channel)、草稿(Draft)、定时发布、置顶、AI 提取 SEO,并自动同步到 MeiliSearch 供检索。

文章(ArticleController,/api/cms/articles

核心服务

  • IArticleService:文章的 CRUD 与查询。CreateAsync / UpdateAsync / DeleteAsync / GetAsyncGetQueryArticleListAsync(支持缓存的列表查询)、GetHotRankArticleListAsync(日/周/月/总榜)、GetMyArticleListAsyncGetSubscribeArticleAsync(我关注的人发布的)、UpdateCommentableAsyncUpdateClassifyUpdateArticleClassifySortAsyncSetStickieAsyncExtractSeoAsync
  • IArticleManager:领域层文章管理(审核状态流转等)。
  • IArticleMeiliSearchService:对 MeiliSearch 文章索引的检索(GetQueryArticleListAsyncSearchArticlesAsync)。

HTTP API

方法路由说明
GET/queryAllowAnonymous已审核文章分页列表(带缓存)
GET/hot-rank-article-listAllowAnonymous热门排行榜(日/周/月/总)
GET/{id}AllowAnonymous文章详情
POST/发布文章(CreateUpdateArticleReq
PUT/{id}更新文章
DELETE/{id}删除文章
GET/my我的文章
GET/subscribe我关注的人的文章
PUT/{id}/comment-able/{commentable}开关是否允许评论
PUT/update-classify/{id}更新文章所属分类
PUT/update-article-classify-sort批量更新某分类下文章排序
PUT/set-stickie置顶/取消置顶(SetStickieReq
GET/query-by-meiliAllowAnonymous走 MeiliSearch 检索文章
GET/search-articlesAllowAnonymous关键词检索文章(keyword/page/pageSize/category
POST/{id}/extract-seoAI 提取 SEO(关键词/摘要/标签,需作者或 CmsKit.Articles.ExtractSeo

开发示例

// 发布文章
var article = await _articleService.CreateAsync(new CreateUpdateArticleReq
{
Title = "Hello CmsKit",
Content = "# Markdown...",
ClassifyId = classifyId,
Commentable = true
});

// 用 MeiliSearch 检索
var docs = await _articleEsService.SearchArticlesAsync("cmskit", page: 1, pageSize: 20);

// 置顶
await _articleService.SetStickieAsync(new SetStickieReq { Id = article.Id, Stickie = true });
# 关键词检索
curl "https://localhost:5000/kit_api/api/cms/articles/search-articles?keyword=cmskit&page=1&pageSize=20"

文章草稿(ArticleDraftController,/api/cms/articles/draft

草稿与正式文章分离(IArticleDraftService),用于编辑器自动保存,不影响线上。

方法路由说明
GET/草稿分页列表
GET/{id}草稿详情
GET/last最近一次草稿
POST/新建/保存草稿(返回草稿 Id)
PUT/{id}覆盖更新草稿
DELETE/{id}删除草稿
POST/format-md-picture处理 Markdown 中的图片(如转存/格式化)

定时发布(ArticleScheduledController,/api/cms/article

通过领域事件在到点后自动发布(IArticleManager / 仓储直接驱动)。

方法路由说明
POST/{articleId}/schedule设定定时发布时间(DateTime body)
POST/{articleId}/cancel-schedule取消定时发布
GET/scheduled/list待发布列表

频道(ChannelController)

频道用于内容导航分组。用户端只读,管理端可维护。

用户端 /api/cms/channels

方法路由说明
GET/nav导航用频道列表
GET/detail频道详情
GET/{id}频道详情(按 Id)

管理端 /api/cms/admin/channels(需 CmsKit.Channels.*

方法路由说明
GET/列表
POST/新建
PUT/{id}更新
DELETE/{id}删除

分类(ClassifyController)

分类挂在文章上。用户端可查,管理端可维护。

用户端 /api/cms/classifies

方法路由说明
GET/分类列表
GET/{id}分类详情

管理端 /api/cms/admin/classifies(需 CmsKit.Classifies.*

方法路由说明
POST/新建
PUT/{id}更新
DELETE/{id}删除

HTML → Markdown(Html2MdController,/api/cms/html2md

把外部网页/富文本转为 Markdown,便于导入文章(Html2MdService)。

方法路由说明
POST/AllowAnonymous按 URL 抓取并转 Markdown(Html2Request
POST/getMdFileAllowAnonymous直接传入 HTML 文本返回 Markdown(GetMdFileRequest
curl -X POST https://localhost:5000/kit_api/api/cms/html2md/getMdFile \
-H "Content-Type: application/json" \
-d '{"html":"<h1>标题</h1><p>正文</p>"}'

相关文档