2016-07-29 57 views
0

我在创建POST JOB(用于在OSS中进行翻译的文件注册的新名称)时遇到问题。我已经使用段上传将ZIP文件上传到存储桶(包含2个revit文件,第一个是root,第二个是revitlink),现在我想要触发转换为SVF。为了这个目的,我使用这段代码(使用Restharp,Newtonsoft.Json):上述模型衍生API - SVF POST作业始终返回400 - 请求正文不是有效的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到交变量:

{ 
 
    "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#中创建一个有效的岗位工作?

回答

0

由于mentioned通过@XiaodongLiang,使用rootFilename(正是这样),否则将无法识别IZE。

现在你的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 with this parameters,这将有助于您调试请求(在这种情况下,头)。

+0

我改变AddParameter调用AddHeader和结果错误保持400 - 巴德请求,只有错误消息更改为:“无法触发此文件的翻译。”很难说如果使用可恢复上传的事实会影响这一点。 – JadaVonRuth

+0

这意味着翻译不能正常工作... JSON请求没问题。你是否在使用一个带有所有.rvt的.zip文件?你能添加更多信息吗? –

+0

也注意到您的原始代码使用compressedUrn = true,这意味着它是一个带有所有.rvt文件的.zip文件。是这样吗?如果你只有一个.rvt,只需通过它的瓮。 –

0

我不知道这是否是大小写敏感的,但看起来你是写“的rootfile ñ火焰”,而帮助说“的rootfile ñ火焰”

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

如果这也不行,你能不能把我的URN(你可以在[email protected] mail给我)。我可以在后台咨询我们的团队。

问候,

晓东梁

锻造Adovater

开发者技术服务

欧特克

+0

我实际上都试过,这只是一个错字。不幸的是,我没有可能测试Node.js上运行的任何东西,因为我完全没有这方面的经验,而且我的问题与C#有关,因为此代码将在服务器Windows服务上运行。 – JadaVonRuth

+0

所以即使这样做也无济于事 – JadaVonRuth

+0

在我们的节点示例中工作正常,所以至少表明这个API没有错误。我建议你首先测试一个简单的非压缩文件,然后使用REST客户端(例如postman,派生POST端点)进行测试,然后我们有一篇文章描述如何执行:http:// adndevblog。 typepad.com/cloud_and_mobile/2016/06/using-3-legged-oauth-for-forge-apis-with-postman.html。 –

相关问题