我正在尝试使用v3 API和Microsoft.Azure.Management.Media
包获取给定资产的所有流式定位器,但是使用Odata查询却遇到了错误的请求错误:
在此行失败:var locator = client.StreamingLocators.List("webinars", "webinars", new ODataQuery<StreamingLocator>(x=>x.AssetName == assetId));
Microsoft.Azure.Management.Media.Models.ApiErrorException: Operation returned an invalid status code 'BadRequest'
当我在没有ODataQuery的情况下使用它时,它返回的很好。
public IList<string> GetLocatorForAsset() {
var assetId = "bb4953cf-4793-4b3c-aed8-ae1bec88a339";
IList<string> streamingUrls = new List<string>();
var locator = client.StreamingLocators.List("webinars", "webinars", new ODataQuery<StreamingLocator>(x=>x.AssetName == assetId));
ListPathsResponse paths = client.StreamingLocators.ListPaths("webinars", "webinars", locator.FirstOrDefault().Name);
foreach (StreamingPath path in paths.StreamingPaths) {
UriBuilder uriBuilder = new UriBuilder();
uriBuilder.Scheme = "https";
uriBuilder.Host = "webinars-use2.streaming.media.azure.net";
uriBuilder.Path = path.Paths[0];
streamingUrls.Add(uriBuilder.ToString());
}
return streamingUrls;
}
}
最佳答案
根据媒体服务过滤文档,用户只能按“名称”,“ properties.created”和“ properties.endTime”过滤“流定位器”。
https://docs.microsoft.com/en-us/azure/media-services/latest/entities-overview#streaming-locators
在您的示例中,您尝试使用不支持的assetId / assetName进行过滤。因此400错误的请求错误。请参阅邮递员中的详细错误示例
这是使用Streaming Locator“名称”标签的有效过滤示例。
注意:这不是资产标签
C#示例,用于使用“名称”成功过滤流定位器
try
{
// GUID need to be specified in single quote. using OData v 3.0
var odataquery = new ODataQuery<StreamingLocator>("name eq '65a1cb0d-ce7c-4470-93ac-fedf66450ea0'");
IPage<StreamingLocator> locators = client.StreamingLocators.List("mediatest", "mymediatestaccount", odataquery);
Console.WriteLine(locators.FirstOrDefault().Name);
Console.WriteLine(locators.FirstOrDefault().StreamingLocatorId);
Console.WriteLine(locators.FirstOrDefault().Id);
ListPathsResponse paths = client.StreamingLocators.ListPaths("mediatest", "mymediatestaccount", locators.FirstOrDefault().Name);
foreach (StreamingPath path in paths.StreamingPaths)
{
UriBuilder uriBuilder = new UriBuilder();
uriBuilder.Scheme = "https";
uriBuilder.Host = "webinars-use2.streaming.media.azure.net";
uriBuilder.Path = path.Paths[0];
Console.WriteLine(uriBuilder.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
我希望这有帮助。
关于c# - Azure媒体服务,带有V3 API和ODataQuery的GetLocators,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55052728/