OneNote API“;格式不正确的多部分消息“;

OneNote API“;格式不正确的多部分消息“;,onenote,Onenote,我正在编写一个库以与新的OneNote API交互 我可以用LiveConnect跳OAuth舞,没有问题,我正在发布一个简单的多部分示例,以证明在我开始添加更多附件之前一切正常 无论我尝试什么,我总是得到: Content-Length: 48 { "Message": "Malformed multipart message" } 问题是,这并不是我能说的那么远 我已经逐个字符地检查了请求主体的标题,看起来很好。我还仔细检查了中的所有调试建议,看不出有什么问题 我已经对HTML U

我正在编写一个库以与新的OneNote API交互

我可以用LiveConnect跳OAuth舞,没有问题,我正在发布一个简单的多部分示例,以证明在我开始添加更多附件之前一切正常

无论我尝试什么,我总是得到:

Content-Length: 48

{
  "Message": "Malformed multipart message"
}
问题是,这并不是我能说的那么远

我已经逐个字符地检查了请求主体的标题,看起来很好。我还仔细检查了中的所有调试建议,看不出有什么问题

  • 我已经对HTML UTF-8进行了编码
  • 我使用一个库来构建主体,并通过一个可视化的解析(见下文)
  • 我要寄到
  • 标题看起来不错,边界、内容类型等也不错
接下来是原始请求,我是否错过了一些显而易见的东西

POST /api/v1.0/pages HTTP/1.1
Host: www.onenote.com
User-Agent: {myLibrary}
Authorization: Bearer {mytoken}
Content-Length: 416
Content-Type: multipart/form-data; boundary=534a5a9ca709c

--534a5a9ca709c
Content-Type: text/html
Content-Disposition: form-data; name="Presentation"

<!DOCTYPE html>
        <html>
          <head>
            <title>onenote test page</title>
            <meta name="created" content="2014-04-13T10:36:28+01:00"/>
          </head>
          <body>
            <p>Hello OneNote World</p>
          </body>
        </html>
--534a5a9ca709c--
POST/api/v1.0/pages HTTP/1.1
主持人:www.onenote.com
用户代理:{myLibrary}
授权:持票人{mytoken}
内容长度:416
内容类型:多部分/表单数据;边界=534a5a9ca709c
--534a5a9ca709c
内容类型:text/html
内容配置:表单数据;name=“演示文稿”
onenote测试页
你好OneNote世界

--534a5a9ca709c--
我通过。如果您将部件名“534a5a9ca709c”替换为其他名称(我只使用了“NewPart”),请求将成功通过

您应该能够使用“534a5a9ca709c”作为部件名称,因此这似乎是我们这边的一个bug。我们将调查它发生的原因,但在此期间,您可以使用变通方法

更新:这与零件名称无关。正如Darren指出的,您需要确保在结束部分名称之后有一个新行(例如“--534a5a9ca709c-->”)

如果在中尝试此操作,请确保更新消息正文和标头中的partname,因为它们需要匹配


-詹姆斯()

感谢@JamesLau MSFT让我走上了正确的轨道

实际上边界是好的。如果在最终边界后有换行符或一些文本,使用Apigee我可以让它发布上面指定的确切内容

您会注意到APIgee中默认的OneNote示例页面在结束边界后有一个点

这项工作:

--534a5a9ca709c
Content-Type: text/html
Content-Disposition: form-data; name="Presentation"

<!DOCTYPE html>
        <html>
          <head>
            <title>onenote test page</title>
            <meta name="created" content="2014-04-13T10:36:28+01:00"/>
          </head>
          <body>
            <p>Hello OneNote World</p>
          </body>
        </html>
--534a5a9ca709c--
Blah Blah
在第一个封装边界和 在最终边界之后。这些区域通常应保留 空白,并且实现应该忽略之前出现的任何内容 第一个边界或最后一个边界之后

更新:


在最终边界之后换行的要求似乎已被删除。

您是否有任何更新,说明为什么在最终分隔符之后需要内容?对我来说,这似乎是不规范的行为。
 --gc0p4Jq0M2Yt08jU534c0p--