0

我在创建 POST JOB(用于在 OSS 中注册文件以进行翻译的新名称)时遇到问题。我已经使用分段上传将 ZIP 文件上传到存储桶(包含 2 个 revit 文件,第一个是 root,第二个是 revitlink),有它的 URN,现在我想触发转换为 SVF。为此,我正在使用这段代码(使用 Restharp,Newtonsoft.Json):

    public void CreatePostJOB(string serviceUrl, string urn, string rootFile, string token)
    {
        try
        {
            RestClient client = new RestClient(serviceUrl);
            RestRequest request = new RestRequest();

            request.Method = Method.POST;
            request.Resource = "modelderivative/v2/designdata/job";
            request.RequestFormat = DataFormat.Json;

            request.AddParameter("Authorization", "Bearer " + token, ParameterType.HttpHeader);
            request.AddParameter("x-ads-force", true);
            request.AddParameter("Content-Type", "application/json");

            JObject jsonbody = new JObject
                    (
                        new JProperty("input", new JObject
                            (
                                new JProperty("urn", urn),
                                new JProperty("compressedUrn", true),
                                new JProperty("rootFileName", rootFile)
                            )),
                        new JProperty("output", new JObject
                            (
                                new JProperty("formats", new JArray
                                    (
                                        new JObject
                                                (
                                                    new JProperty("type", "svf"),
                                                    new JProperty("views", new JArray("3d", "2d"))
                                                )
                                    ))
                            ))
                    );


            string post = jsonbody.ToString(Formatting.Indented);

            request.AddParameter("application/json", post, ParameterType.RequestBody);

            IRestResponse resp = client.Execute(request);

            if (resp.StatusCode == HttpStatusCode.OK)
            {
                //TODO
            }
        }
        catch (Exception ex)
        {
            //TODO
        }
    }

上面的代码会将以下 JSON 生成到 post 变量中:

{
  "input": {
    "urn": "/*urn base64 string with no padding*/",
    "compressedUrn": true,
    "rootFileName": "MainModel_A.rvt"
  },
  "output": {
    "formats": [
      {
        "type": "svf",
        "views": [
          "3d",
          "2d"
        ]
      }
    ]
  }

无论我如何更改此代码结果总是相同的:

{"diagnostic":"Request body is not a valid json"}

我还尝试使用具有相同结果的普通 C# WebRequest。也许有一个错误,因为来自同一 API 的其他调用与 restsharp 一起工作就像一个魅力。请问如何在 C# 中创建有效的发布作业?

4

2 回答 2

0

我不确定它是否区分大小写,但看起来您写为“rootFile Name ”,而帮助显示“rootFile name

我昨天碰巧写了一篇关于这个话题的博客。我还提供了一个测试工具,可以很好地与演示 Revit 文件(带有链接文件)配合使用。如果您的文件不大,您能否在该博客中使用我的测试工具(Node.js)对其进行检查?我没有添加恢复上传,所以最好测试相对较小的文件。
http://adndevblog.typepad.com/cloud_and_mobile/2016/07/translate-referenced-files-by-derivative-api.html

如果这不起作用,您能否将 URN 发给我(您可以通过 xiaodong.liang@autodesk.com 给我发邮件)。我可以在后端咨询我们的团队。

问候,

梁晓东

锻造崇拜者

开发者技术服务

欧特克

于 2016-07-29T12:26:27.250 回答
0

正如@XiaodongLiang 所说使用rootFilename 完全像这样),否则将无法识别。

现在您的 C# 代码应该是(在我这边工作):

RestClient client = new RestClient(serviceUrl);
RestRequest request = new RestRequest();
request.Method = Method.POST;
request.Resource = "modelderivative/v2/designdata/job";
request.AddHeader("Accept", "application/json");
request.AddParameter("Authorization", "Bearer " + token, ParameterType.HttpHeader);
request.AddParameter("application/json", jsonbody.ToString(Formatting.None), ParameterType.RequestBody);

IRestResponse resp = client.Execute(request);

if (resp.StatusCode == HttpStatusCode.OK)
{
  //TODO
}

我建议您使用此参数更改您的 app.config ,这将有助于您调试您的请求(在本例中为标头)。

于 2016-07-29T14:17:36.267 回答