使用BoostNote发布博客到非WordPress站点

@adens 6/28/2018 8:07:19 AM

写在前面

个人的博客是自己使用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返回接受两个参数idlink 详情见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,用来更新博客. 同样抓包检查更新的数据格式和更新地址

  1. 数据格式没变
            {
        "title":"title",
        "content":"博客内容",
        "status":"publish"
    }

值得注意的是,BoostNote的笔记第一行会被当成Title,不会出现在content里面.虽然是写在一起的.

  1. 更新地址 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}

最后

到这里流程结束了.这样就可以边写博客边发布了.但是这样还是远远不够的.对于发布博客还需要进行登陆验证来保证博客只有自己能发布.这个具体的实现流程请等下回分解.

Last Modification : 6/28/2018 8:07:19 AM


In This Document