写在前面
个人的博客是自己使用ASP.NET Core
手写的,从页面到后台逻辑全都可以自己手动定制,所以想要完成这个流程还是挺容易的!!
同时由于BoostNote原生就支持发布到WordPress站点.所以使用WordPress构建博客站点的可以不用往下看了,
如果你也是和我一样学习从零开始编写博客网站,不管使用什么语言,希望这篇文章能够对你有一丝启发.
1.BoostNote设置
设置里面有博客选项,打开后填写自己的博客发布地址和登陆方式
本地测试填写的使用地址https:\localhost:44383\api\values ,登陆方式未填写.(测试时不使用验证登陆等功能).
2.发布操作
使用BoostNote写完博客之后.
在博客页面点击发布就可以了,如果已经发布的,可以点更新.完美的操作流程.
3.解决方案
3.1 基础数据
首先要知道BoostNote 发布所构建的数据格式,
使用Fiddle 抓包工具,抓取发布的地址数据.打开fiddle 找到 步骤1 里填写的地址 https:\localhost:44383\api\values ,查看后得知
1.发布的完整地址 https:\localhost:44383\api\blog\wp\v2\posts . (由于BoostNote是默认发布WordPress站点,所以带上了wp\v2\posts 这样字段,并不是设置里面的https:\localhost:44383\api\blog )
2.发布的json格式
{
"title":"title",
"content":"博客内容",
"status":"publish"
}
3.发布使用的是Post提交,更新是使用Put提交(基本上是按照RESTful形式的API设计,所以很容易理解)
4.Auth方式.选择user是Basic,选择jwt是Bearer.遵从OAuth2.0协议标准.详情见阮一峰老师博客
3.2 构建接受API和数据结构
BoostNoteModel.cs
\\ BoostNoteModel.cs
public class BoostNoteModel
{
public string title { get; set; }
public string content { get; set; }
public string status { get; set; }
}
ValueController.cs 里面 写上 post 方法
\\ ValueController.cs
[HttpPost("wp\v2\posts")]
public IActionResult Post(BoostNoteModel blog)
{
\\保存代码
return Ok("success");
}
这一步做完测试一下.毫不意外的发布失败.
如果在代码里加断点调试就会发现,程序运行了Post方法,并且已经获得了发布的数据.后续也没有报错.但就是发布失败.
思考一下这个过程:BoostNote发送数据request到Blog,Controller处理保存数据,并返回一个Ok的resposne .BoostNote接受OK的Resposne,提示发布失败.Controller 的处理数据未报错,那就是response出了问题.毕竟BoostNote发布之后要接收到正确的返回值才能确认是否真的发布成功.
首先想到的是返回的是OK即200.但是严格按照RESTful风格编码create应该返回201.在ASP.Net Core
对应
return Created("success");
测试仍然出错.不是错在返回状态码.而是应该返回了其他的数据.幸好BoostNote是开源的.在github阅读源码之后发现,BoostNote返回接受两个参数id 和link 详情见github/BoostID PublishMarkdownNow方法
构建返回Model
\\ BoostNoteModel_Result.cs
public class BoostNoteModel_Result
{
public string link { get; set; }
public string id { get; set; }
}
修改controller里面的Post方法
\\ ValueController.cs
[HttpPost("wp\v2\posts")]
public IActionResult Post(BoostNoteModel blog)
{
\\保存博客代码
BoostNoteModel_Result result = new BoostNoteModel_Result(){
id = "1",\\保存代码执行后返回的博客ID.后面更新博客会用到
link ="https:\\localhost:44383\api\values\1"\\博客查看地址(在BoostNote里点击查看博客会跳转到这个链接)
}
return Ok(result);
}
再次测试.这一回就完美通过了.显示发布成功并且展示查看博客的地址.
3.3 更新博客
在初次上传成功后BoostNote会保存这个博客的ID,用来更新博客.
同样抓包检查更新的数据格式和更新地址
- 数据格式没变
{
"title":"title",
"content":"博客内容",
"status":"publish"
}
值得注意的是,BoostNote的笔记第一行会被当成Title,不会出现在content里面.虽然是写在一起的.
- 更新地址
Put方式提交:http:\localhost:44383\api\blog\wp\v2\posts\1
可以看出最后多了一个" \1 "这就是发布返回的博客id
写controller的更新方法
\\ValueControoler.cs
[HttpPut("wp\v2\posts\{id}")]
public IActionResult Put(string id, API_Note_Blog blog)
{
\\ 更新博客代码
BoostNoteModel_Result result = new BoostNoteModel_Result(){
id = "1",\\更新代码执行后返回的博客ID
link ="https:\\localhost:44383\api\values\1"\\博客查看地址
}
return Ok(result);
}
大体上和post方法一样只是修改了Api地址加上{\id}
最后
到这里流程结束了.这样就可以边写博客边发布了.但是这样还是远远不够的.对于发布博客还需要进行登陆验证来保证博客只有自己能发布.这个具体的实现流程请等下回分解.