0

POST JOB(翻訳用OSSにファイルを登録するための新しい名前)の作成に困っています。セグメントのアップロードを使用して ZIP ファイルをバケットに既にアップロードしています (2 つの revit ファイルを含み、最初はルート、2 番目は revitlink)、その URN を持っているので、SVF への変換をトリガーしたいと考えています。この目的のために、私はこのコードを使用しています (Resharp、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 n ame」と表示されているのに、「rootFile N ame」と書いているようです。

昨日、たまたまその話題でブログを書いていました。また、デモ 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をこの parametersで変更することをお勧めします。これは、リクエスト (この場合はヘッダー) のデバッグに役立ちます。

于 2016-07-29T14:17:36.267 に答える