首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传视频到api.videoindexer.ai并提供回调地址时,回调body消息为空

上传视频到api.videoindexer.ai并提供回调地址时,回调body消息为空
EN

Stack Overflow用户
提问于 2021-07-10 06:38:56
回答 1查看 17关注 0票数 0

我不确定我是否正确使用了callbackUrl,或者视频索引器服务中的回调逻辑是否有问题。此回调专门针对您向索引服务提交(上传)视频时使用。

以下代码段工作并生成对服务的http POST请求,服务成功导入视频并对其进行处理。然而,当它完成时,回调post主体是空的。

我要发送到的端点定义:

代码语言:javascript
复制
https://api.videoindexer.ai/{location}/Accounts/{accountId}/Videos?name={name}[&privacy][&priority][&description][&partition][&externalId][&externalUrl][&callbackUrl][&metadata][&language][&videoUrl][&fileName][&indexingPreset][&streamingPreset][&linguisticModelId][&personModelId][&animationModelId][&sendSuccessEmail][&assetId][&brandsCategories][&accessToken]

发布请求的应用程序(此代码正在运行)

代码语言:javascript
复制
Config.ApiKey.Remove("Ocp-Apim-Subscription-Key");

VideosApi videosApi = new VideosApi(Config);

string callbackUrl = $"{FunctionApiEndpoint}/api/VideoIndexStatus?Code={FunctionApiCode}&clientId={FunctionApiClientId}";

ApiResponse<dynamic> result = await videosApi.UploadVideoAsyncWithHttpInfo($"Snag1 - {DateTime.UtcNow.Ticks}",
    Location,
    AccountId,
    privacy: "private",
    accessToken: Token.Data.Content.ToString().Replace("\"", ""),
    description: $"Test Video Segment - {DateTime.UtcNow.Ticks}",
    fileName: "Snag1.MP4",
    callbackUrl: callbackUrl,
    videoUrl: "https://mystorage.blob.core.windows.net/testmedia/Snag1.MP4",
    xMsClientRequestId: MsClientId);

Console.WriteLine(result.Data.Content);

函数App / Webhook (此代码正在运行)

代码语言:javascript
复制
[FunctionName("VideoIndexStatusRun")]
[return: ServiceBus("servicebus.queue.dev", Connection = "AzureWebJobsServiceBus", EntityType = EntityType.Queue)]
public async Task<IActionResult> VideoIndexStatusRun(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "VideoIndexStatus")] HttpRequest req,
    ILogger log,
    ExecutionContext context)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string postdata = await new StreamReader(req.Body).ReadToEndAsync();

    log.LogInformation($"Postdata='{postdata}' | Postdata.Length='{postdata.Length}'");

    return new OkObjectResult(postdata);
}

一旦媒体被处理并在门户"https://www.videoindexer.ai/media/library“中完成媒体分析,它就会向我的函数应用程序发送一条post消息。但是,postdata是一个空字符串"“,长度= 0。

我正在使用Application Insights检查我的函数应用程序中发生了什么,我可以在来自videoindexer.ai服务的回调事件之后在app Insights中看到发布的消息"Postdata='‘| Postdata.Length='0'“。

EN

回答 1

Stack Overflow用户

发布于 2021-07-10 06:48:28

在发布这个问题后不久,我意识到答案是什么,并希望能帮助其他人,比如我,我意识到回调过程并不是发布“正文消息”,而是在URL查询字符串中返回它。

(我需要更好地阅读文档...)

因此,我应该像下面这样编写函数应用程序的webhook方法:

代码语言:javascript
复制
[FunctionName("VideoIndexStatusRun")]
[return: ServiceBus("servicebus.queue.dev", Connection = "AzureWebJobsServiceBus", EntityType = EntityType.Queue)]
public async Task<IActionResult> VideoIndexStatusRun(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "VideoIndexStatus")] HttpRequest req,
    ILogger log,
    ExecutionContext context)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string message = $"{{\"id\":\"{req.Query["id"]}\",\"state\":\"{req.Query["id"]}\"}}";

    return new OkObjectResult(message);    
}

现在可以捕获来自查询字符串的返回值,并将其转发到我的消息处理器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68323303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档