模型导数 API - SVF POST Job always returns 400 - 请求正文无效 json
Model derivative API - SVF POST Job always returns 400 - Request body is not a valid json
我在创建 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
}
}
上面的代码将在 post 变量中生成以下 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# 中创建有效的 post 作业?
我不确定它是否区分大小写,但看起来你写的是 'rootFileName' 而帮助说 'rootFilename'
我昨天碰巧写了一篇关于这个话题的博客。我还提供了一个测试工具,它可以很好地与演示 Revit 文件(带有链接文件)一起使用。如果你的文件不大,你能用我在那个博客中的测试工具(Node.js)检查一下吗?我没有添加断点续传,比较小的文件比较好测试
http://adndevblog.typepad.com/cloud_and_mobile/2016/07/translate-referenced-files-by-derivative-api.html
如果这不起作用,你能把 URN 发给我吗(你可以发邮件给我 xiaodong.liang@autodesk.com)。我可以在后端咨询我们的团队。
此致,
梁晓东
锻造崇拜者
开发者技术服务
欧特克
如mentioned by @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 with this parameters,这应该可以帮助您调试请求(在本例中为 headers)。
我在创建 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
}
}
上面的代码将在 post 变量中生成以下 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# 中创建有效的 post 作业?
我不确定它是否区分大小写,但看起来你写的是 'rootFileName' 而帮助说 'rootFilename'
我昨天碰巧写了一篇关于这个话题的博客。我还提供了一个测试工具,它可以很好地与演示 Revit 文件(带有链接文件)一起使用。如果你的文件不大,你能用我在那个博客中的测试工具(Node.js)检查一下吗?我没有添加断点续传,比较小的文件比较好测试
http://adndevblog.typepad.com/cloud_and_mobile/2016/07/translate-referenced-files-by-derivative-api.html
如果这不起作用,你能把 URN 发给我吗(你可以发邮件给我 xiaodong.liang@autodesk.com)。我可以在后端咨询我们的团队。
此致,
梁晓东
锻造崇拜者
开发者技术服务
欧特克
如mentioned by @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 with this parameters,这应该可以帮助您调试请求(在本例中为 headers)。