1

我相信我已经尝试了所有组合来发布到这条路线并继续得到 404。我做错了什么?

我想将 courseOffering 的父级设置为不同但现有的 courseTemplate。courseOffering orgUnitId 是 31273,新的父(courseTemplate)orgUnitId 是 31286。使用的路线是:POST .../d2l/api/lp/1.2/orgstructure/31273/parents/(也试过不带尾随的 /) JSON 块是:{"OrgUnitId":31286}

我也尝试过 Id 和 Identifier 代替 OrgUnitId 和一个字符串,“31286”而不是一个 int 和 orgUnitId(小写)——所有结果都是 404。

fwiw,使用相同路线的 get 工作得很好。

来自 Valence 文档的 cwt:POST /d2l/api/lp/(version)/orgstructure/(orgUnitId)/parents/ 给提供的组织单位一个新的父组织单位。

参数:版本 (D2LVERSION) – API 版本。orgUnitId (D2LID) – 组织单位 ID。JSON 参数:

OrgUnitId(D2LID 作为单个 JSON 编号)– 要添加为父级的组织单元。

4

1 回答 1

0

文档说此 POST 的预期输入数据是作为“单个 JSON 编号”提供的组织单位 ID 值。

当你说你正在通过时:

{"OrgUnitId": 31286}

您提供的是具有单个属性的 JSON 对象(复合),名为“OrgUnitId”,具有 JSON 数字值。实际上,您应该提供的是:

31286

但是您仍然应该指出这是一个 JSON 正文,因此您应该将 HTTP 请求Content-Type标头设置为application/json)。这是成功拨打此电话的交互式会话的摘录;我们为您转储 HTTP 响应/请求对象的各个组件(r 是响应,r.request 是提示响应的原始请求):

In [40]: r.request.method
Out[40]: 'POST'

In [41]: r.request.url
Out[41]: 'https://{host}/d2l/api/lp/1.1/orgstructure/8083/parents/?x_b={user_id}&x_c={app_sig}&x_a={app_id}&x_d={user_sig}&x_t=1391183251'

In [42]: r.request.headers
Out[42]: CaseInsensitiveDict({'Content-Length': '4', 'User-Agent': 'python-requests/2.2.1 CPython/3.3.3 Darwin/12.5.0', 'Content-Type': 'application/json', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, compress'})

In [43]: r.request.body
Out[43]: '6984'

In [44]: r.status_code
Out[44]: 200

课程设置和课程模板具有特殊的关系,因为每个课程设置都必须有一个课程模板作为父级。您可以先将新课程模板作为父课程添加到课程中,然后删除旧的,否则后端服务可能根本不允许您从课程中分离课程模板。

于 2014-01-31T16:02:17.813 回答