使用rest api,Azure媒体服务作业创建失败

时间:2017-09-06 10:22:32

标签: rest azure asp.net-core azure-media-services

尝试使用Azure媒体服务rest api。 (遵循教程:https://docs.microsoft.com/en-us/azure/media-services/media-services-rest-get-started

一切正常,直到我尝试创建一个Job。发送与示例相同的请求(资产ID和令牌除外)并获得响应: 解析请求内容失败的原因是:确保仅使用由类型

定义的属性名称

请求:

    POST https://wamsdubclus001rest-hs.cloudapp.net/api/Jobs HTTP/1.1
    Connection: Keep-Alive
    Content-Type: application/json
    Accept: application/json; odata=verbose
    Accept-Charset: UTF-8
    Authorization: Bearer token -> here i send real token
    DataServiceVersion: 1.0;NetFx
    MaxDataServiceVersion: 3.0;NetFx
    x-ms-version: 2.11
    Content-Length: 458
    Host: wamsdubclus001rest-hs.cloudapp.net

        {
        "Name":"TestJob",
        "InputMediaAssets":[
        {
        "__metadata":{
        "uri":"https://wamsdubclus001rest-hs.cloudapp.net/api/Assets('nb%3Acid%3AUUID%3A5168b52a-68ed-4df1-bac8-0648ce734ff6')"
        }
        }
        ],
        "Tasks":[
        {
        "Configuration":"Adaptive Streaming",
        "MediaProcessorId":"nb:mpid:UUID:ff4df607-d419-42f0-bc17-a481b1331e56",
        "TaskBody":"<?xml version=\"1.0\" encoding=\"utf-8\"?><taskBody><inputAsset>JobInputAsset(0)</inputAsset> <outputAsset>JobOutputAsset(0)</outputAsset></taskBody>"
        }
        ]
        }

响应:

{
"error":{
"code":"",
"message":{
"lang":"en-US",
"value":"Parsing request content failed due to: Make sure to only use property names that are defined by the type"
}
}
}

它似乎与__metadata属性有关。当我按照此处的说明进行操作时:Creating Job from REST API returns a request property name error,错误会发生变化:

"error":{
"code":"",
"message":{
"lang":"en-US",
"value":"Invalid input asset reference in TaskBody - "
}
}
}

不能弄清楚什么是错的,谢谢

2 个答案:

答案 0 :(得分:1)

让我检查一下,但这可能是我过去遇到过的几个问题。

首先。将Accept和Content-Type标头都设置为: “application / json; odata = verbose”

接下来,仔细检查您实际上是否在元数据属性上使用长下划线字符。我遇到的问题是发送错误的下划线字符并且它与属性名称不匹配。

如果其中任何一个有帮助,请告诉我。

答案 1 :(得分:0)

似乎问题是关于“内容类型”。当我使用.net Core时,将Conent类型设置为“application / json; odata = verbose”并不容易。

1)尝试使用RestSharp - dosnt支持它,它将“odata = verbose”部分删掉

2)尝试使用Systsem.Net.Http.HttpClient - &gt;可能但很难。 将其添加为“接受”:

 SELECT * FROM table1 WHERE id = 1
 UNION ALL 
 SELECT * FROM table2 WHERE id = 1

将其添加为“内容类型”:

         MediaTypeWithQualityHeaderValue mtqhv;

         MediaTypeWithQualityHeaderValue.TryParse("application/json;odata=verbose", out mtqhv);

         client.DefaultRequestHeaders.Accept.Add(mtqhv);//ACCEPT header