Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Microsoft Bot Framework中检索AdaptiveCard发布的表单数据?_C#_Botframework_Adaptive Cards - Fatal编程技术网

C# 如何在Microsoft Bot Framework中检索AdaptiveCard发布的表单数据?

C# 如何在Microsoft Bot Framework中检索AdaptiveCard发布的表单数据?,c#,botframework,adaptive-cards,C#,Botframework,Adaptive Cards,我已经创建了一个Bot框架项目,正在使用LUIS意图和实体填充AdaptiveCard的字段,然后将其附加到活动并发布给用户。我已将提交作为卡的一部分,相关代码如下: [LuisIntent("Query GPN")] public async Task QueryGPN(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result) {

我已经创建了一个Bot框架项目,正在使用LUIS意图和实体填充AdaptiveCard的字段,然后将其附加到活动并发布给用户。我已将提交作为卡的一部分,相关代码如下:

        [LuisIntent("Query GPN")]
    public async Task QueryGPN(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
    {
        EntityRecommendation GPN;

        AdaptiveCard gpnCard = new AdaptiveCard();

        gpnCard.Body.Add(new TextBlock()
        {
            Text = "GPN Lookup Form",
            Size = TextSize.Large,
            Weight = TextWeight.Bolder
        });

        gpnCard.Body.Add(new TextBlock()
        {
            Text = "GPN",
            Weight = TextWeight.Bolder
        });

        TextInput gpnInput = new TextInput()
        {
            Id = "GPN",
            IsMultiline = false
        };

        gpnCard.Body.Add(gpnInput);

        gpnCard.Actions.Add(new SubmitAction()
        {
            Title = "Submit"
        });

        if (result.TryFindEntity("GPN", out GPN))
        {
            await context.PostAsync($"You want to know about a GPN {GPN.Entity}? Prepopulating form.");
            gpnInput.Value = GPN.Entity;
        }
        else
        {
            await context.PostAsync("It seems like you wanted to know about a GPN, but I couldn't find a GPN in your request.");
        }

        Attachment gpnCardAttachment = new Attachment()
        {
            ContentType = AdaptiveCard.ContentType,
            Content = gpnCard
        };

        IMessageActivity gpnFormMessage = context.MakeMessage();
        gpnFormMessage.Attachments = new List<Attachment>();
        gpnFormMessage.Attachments.Add(gpnCardAttachment);

        await context.PostAsync(gpnFormMessage);

        context.Done<IMessageActivity>(null);
    }
[LuisIntent(“查询GPN”)]
公共异步任务查询PN(IDialogContext上下文、IAwaitable活动、LuisResult结果)
{
实体推荐GPN;
AdaptiveCard gpnCard=新的AdaptiveCard();
gpnCard.Body.Add(新的TextBlock()
{
Text=“GPN查找表单”,
Size=TextSize.Large,
重量=文本重量。加粗
});
gpnCard.Body.Add(新的TextBlock()
{
Text=“GPN”,
重量=文本重量。加粗
});
TextInput gpnInput=new TextInput()
{
Id=“GPN”,
IsMultiline=false
};
gpnCard.Body.Add(gpnInput);
gpnCard.Actions.Add(新SubmitAction())
{
Title=“提交”
});
if(结果TryFindEntity(“GPN”,out GPN))
{
wait context.PostAsync($“您想知道关于GPN{GPN.Entity}?预填充表单的信息。”);
gpnInput.Value=GPN.Entity;
}
其他的
{
wait context.PostAsync(“您似乎想了解GPN,但我在您的请求中找不到GPN。”);
}
附件gpnCardAttachment=新附件()
{
ContentType=AdaptiveCard.ContentType,
内容=gpnCard
};
IMessageActivity gpnFormMessage=context.MakeMessage();
gpnFormMessage.Attachments=新列表();
gpnFormMessage.Attachments.Add(gpnCardAttachment);
wait context.PostAsync(gpnFormMessage);
context.Done(null);
}
我试图在用户单击Submit按钮时检索此表单的内容,该按钮似乎向MessagesController中的Post方法发送消息活动。但是,此消息活动的内容为空。如何从此消息活动中检索与提交操作关联的负载?在上面的示例中,如何检索“GPN”键的值?我试着查看附件,但似乎没有:

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        try
        {
            IMessageActivity message = await result;

            if(message.Text == null)
            {
                await context.PostAsync("Received null message.");
                if (message.Attachments != null)
                {
                    await context.PostAsync($"Attachments: {message.Attachments.Count}");
                }
                else
                {
                    await context.PostAsync($"No attachments.");
                }

                if(message.ChannelData != null)
                {
                    await context.PostAsync("ChannelData contains something");
                }
                else
                {
                    await context.PostAsync($"No channel data.");
                }

                context.Wait(MessageReceivedAsync);
            }
            else
            {
                await context.Forward(new IntentDialog(), IntentDialogAfter, message, CancellationToken.None);
            }
        }
        catch (Exception e)
        {
            await context.PostAsync(e.Message);
        }
    }
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
尝试
{
IMessageActivity消息=等待结果;
如果(message.Text==null)
{
wait context.PostAsync(“接收到空消息”);
如果(message.Attachments!=null)
{
wait context.PostAsync($“附件:{message.Attachments.Count}”);
}
其他的
{
wait context.PostAsync($“无附件”);
}
if(message.ChannelData!=null)
{
wait context.PostAsync(“ChannelData包含某些内容”);
}
其他的
{
wait context.PostAsync($“无通道数据”);
}
Wait(MessageReceivedAsync);
}
其他的
{
wait context.Forward(new IntentDialog(),IntentDialogAfter,message,CancellationToken.None);
}
}
捕获(例外e)
{
wait context.PostAsync(e.Message);
}
}

单击
提交
按钮后,尝试在
MessageReceivedAsync
上检查消息的
属性

是一个使用Submit按钮并读取值的示例