0

我很好奇是否有人在 Java 中使用 Valance 成功实现了 D2L 中的路由,如下所示:

PUT /d2l/api/le/(D2LVERSION: 版本)/(D2LID: orgUnitId)/grades/(D2LID:gradeObjectId)/values/(D2LID: userId)

当我彻底检查所需的 ID 是否与我在 D2L 中的记录相匹配时,我一直在努力从这个电话中收到 404。当我使用我在 Java 中使用的讲师级别帐户登录 D2L 时,我看到课程、测试和参与者都在那里。这些 ID 在 Java 代码中用于调用上述路由,但我收到 404 并且成绩未更新。

这是代码的片段:

HttpURLConnection  connection = null ;

    try {
        uri = userContext.createAuthenticatedUri ("/d2l/api/le/1.0/"+courseId+"/grades/"+gradeId+"/values/"+ userId, "PUT");

        connection= (HttpURLConnection)uri.toURL().openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("PUT");
        connection.setRequestProperty("Content-Type", "application/json");

        OutputStream os = connection.getOutputStream();
        String updatedScore = "{\"GradeObjectType\":1,\"PointsNumerator\":\"5\"}";
        os.write(updatedScore.getBytes());
        os.flush();

    }catch(Exception e){
        e.printStackTrace();
    }

courseID、gradeID 和 userID 正在传入并已在 D2L Web UI 中进行验证。如您所见,我为 GradeObjectType 为 1 和 PointsNumerator 为 5 创建了一个 JSON 字符串。除了默认的 Instructor 帐户权限之外,是否还有特殊权限才能允许此类调用?

任何想法将不胜感激。谢谢

4

1 回答 1

0
  1. (如果您还没有)您可以尝试调用 get 来检索这些值,以确保它们存在并且您的基本逻辑正常工作。
  2. 如果您有权访问一个非常特权的帐户,您可以使用该帐户来尝试排除权限问题。可以在 UI 中设置成绩的教师应该能够通过 API 设置成绩。

更新:

下面是一个成功请求和响应的示例,也许您可​​以找出差异:

REQUEST:

PUT https://valence.desire2learn.com/d2l/api/le/1.0/7574/grades/4852/values/3902?x_b=xDaPHeptaw9syoI1EGdeJ1&x_a=L2Hd9WvDTcyiyu5n2AEgpg&x_d=6U5NTYnTswz4gnu-vZHT3bajswsp3jvxYtwzoeOWKUs&x_c=a6f5hEMrvAxC6PS5UlSUOusVpj-XKnOBwxqhYg5pNtg&x_t=1343070852 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json

{
                "GradeObjectType": 1,
                "PointsNumerator": 9
}


RESPONSE:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Date: Mon, 23 Jul 2012 19:14:48 GMT
于 2012-07-22T20:57:03.867 回答