404向Desire2Learn发布内容

404向Desire2Learn发布内容,desire2learn,Desire2learn,我已经为Desire2Learn建立了一个基本的Valence应用程序,现在我正在尝试发布数据,我得到了400或404错误 如果我做一个 至/d2l/api/le/(D2LVERSION:version)/(D2LID: orgUnitId)/content/root/,使用正确的orgUnitId,我可以看到所有 课程内容。然而,当我 属于 输入Module,它返回一个400。文档中没有列出400的任何内容 那个特定请求的错误,但我假设我把程序搞砸了 ContentObjectData。我试了

我已经为Desire2Learn建立了一个基本的Valence应用程序,现在我正在尝试发布数据,我得到了400或404错误

如果我做一个 至/d2l/api/le/(D2LVERSION:version)/(D2LID: orgUnitId)/content/root/,使用正确的orgUnitId,我可以看到所有 课程内容。然而,当我 属于 输入Module,它返回一个400。文档中没有列出400的任何内容 那个特定请求的错误,但我假设我把程序搞砸了 ContentObjectData。我试了很多次,但结果总是失败 400JSON块如下所示: { “标题”:“API测试”, “简称”:“, “类型”:0, “ModuleStartDate”:空, “ModuleEndDate”:空, “IsLocked”:false, “IsHidden”:真的吗 }

如果我提出要求 至/d2l/api/le/(D2LVERSION:version)/(D2LID: 组织ID)/content/modules/(D2LID:moduleId)/structure/,具有正确的 orgUnitId和moduleId,我可以看到模块的内容。当我 A. ContentObjectData类型为Topic,它返回404。我是在做这件事 Python,没有给出示例SDK代码,所以我转换了PHP 一个

我一直在使用另一个JSON 使用键“Url”和相应的值进行块。这是完整的答案 我一直试图发布的编码多部分正文:

    --redacted.132.0.68062.1336325296.611.1
    Content-Disposition: form-data; name="ContentObjectData"
    Content-Type: application/json

    {"StartDate": null, "IsLocked": false, "TopicType": 3, "ShortTitle":
"", "Title": "API Test", "Url": "http://redacted.edu",
"EndDate": null, "IsHidden": true, "Type": 1}
    --redacted.132.0.68062.1336325296.611.1
    Content-Type: application/json

    {"Url": "http://redacted.edu"}
    --redacted.132.0.68062.1336325296.611.1--
为什么GET和POST的相同URI只会导致POST的404?信息技术 中的两个调用之间的结构似乎没有任何不同 文件。我尝试了这个调用作为一个普通的POST请求和多部分, 但两者的结果都是404。我用3种不同的方法尝试了这两个电话
这似乎是两个不同的问题,一个是关于路由/d2l/api/le/{ver}/{orgUnitId}/{content/root/,另一个是关于路由/d2l/api/le/{ver}/{orgUnitId}/{content/modules/{moduleId}/structure/。我将尝试分别解决这些问题:

添加根模块。第一个路由用于将路由模块添加到组织单元的内容存储库中。路由对“Title”和“ShortTitle”属性有特殊的限制:它们都必须是非null和非空的。此外,ShortTitle属性的格式必须不能“修剪”为空字符串(例如,它不能是只有空格的字符串)。对这些字符串的限制稍有不同,这被认为是不一致的,在未来的版本中可能会有更常规的方法。如果您采取的方法必须为新根模块提供标题和短标题,那么您就安全了

将主题添加到现有内容结构中。第二条路径用于添加到组织单元内容存储库中现有模块的结构中。使用路由的方式因是否要添加URL或是否要添加文件而异

要添加一个只不过是URL的主题,您只需要提供多部分/混合文章的第一部分(实际上,您可以只发送一篇文章正文),其类型为application/json:

{
   "Title": "Test link topic title",
   "ShortTitle": "Link",
   "Type": 1,
   "TopicType": 3,
   "URL": "http://fqd.url.to.resource.com/",
   "StartDate": null,
   "EndDate": null,
   "IsHidden": false,
   "IsLocked": false
}
注意:(a)您的主题必须有一个简短的标题——事实上,主题数据块对标题和简短标题属性的限制与上面第一个问题相同;而且,(b)您不需要只提供包含URL的第二部分

要添加作为文件的主题,您可以提供一个类似的JSON块作为多部分/混合文章正文的第一部分,但是(a)TopicType应该具有值“1”以指示主题是文件,(b)URL属性应该指向组织单元现有内容空间中的有效位置URL(这就是后端服务知道文件存储在哪里的方式)和(c)文章的第二部分应该包含文件数据。你的文章正文最终会看起来像这样:

POST https://yourlms.edu/d2l/api/le/{ver}/{orgUnitId}/content/modules/{moduleId}/structure/?{auth} HTTP/1.1
Content-type: multipart/mixed; boundary=FOO
Content-length: {length}

--FOO
Content-type: application/json
{
   "Title": "Test file topic title",
   "ShortTitle": "File",
   "Type": 1,
   "TopicType": 1,
   "URL": "http://fqd.url.to.resource.com/",
   "StartDate": null,
   "EndDate": null,
   "IsHidden": false,
   "IsLocked": false
}

--FOO
Content-Disposition: form-data; name=""; filename={filename}
Content-Type: {file's content type}

{binary data}
目前,配价参考文档没有明确区分这两种请求,它们将很快更新以区分这两种请求