2016-07-29 28 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。 –

相關問題