C# Bot框架对话框链返回值两次?
我正试图理解C#的MicrosoftBot框架 当我说“1”时,它返回“said 1”两次,当我说“2”时,它返回“said 2”两次,以此类推。我不明白为什么这是返回值两次。我还注意到,若在测试中设置了断点,它将永远不会被命中。关于对话链,我不了解的是什么?我已经看过了 我有一个简单的类TestDialog。 在MessagesController.cs中,我将其实例化为:C# Bot框架对话框链返回值两次?,c#,botframework,C#,Botframework,我正试图理解C#的MicrosoftBot框架 当我说“1”时,它返回“said 1”两次,当我说“2”时,它返回“said 2”两次,以此类推。我不明白为什么这是返回值两次。我还注意到,若在测试中设置了断点,它将永远不会被命中。关于对话链,我不了解的是什么?我已经看过了 我有一个简单的类TestDialog。 在MessagesController.cs中,我将其实例化为: public async Task<HttpResponseMessage> Post([FromB
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => TestDialog.dialog);
}
}
公共异步任务发布([FromBody]活动)
{
if(activity.Type==ActivityTypes.Message)
{
wait Conversation.sendaync(活动,()=>TestDialog.dialog);
}
}
这里是TestDialog.cs
public class TestDialog : IDialog<string>
{
public static readonly IDialog<string> dialog = Chain
.PostToChain()
.Switch(
new Case<IMessageActivity, IDialog<string>>((msg) =>
{
var regex = new Regex("^1", RegexOptions.IgnoreCase);
return regex.IsMatch(msg.Text);
}, (ctx, msg) =>
{
return Chain.Return("said 1");
}),
new Case<IMessageActivity, IDialog<string>>((msg) =>
{
var regex = new Regex("^2", RegexOptions.IgnoreCase);
return regex.IsMatch(msg.Text);
}, (ctx, msg) =>
{
return Chain.Return("said 2");
}),
new DefaultCase<IMessageActivity, IDialog<string>>((ctx, msg) =>
{
return Chain.Return("default");
})
).Unwrap().PostToUser();
public async Task StartAsync(IDialogContext context)
{
await Test(context);
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
await Test(context);
}
private async Task Test(IDialogContext context)
{
if (true)
{
context.Wait(MessageReceivedAsync);
}
else
{
context.Done("done");
}
}
}
公共类测试对话框:IDialog
{
公共静态只读IDialog对话框=链
.PostToChain()
.开关(
新案例((msg)=>
{
var regex=new regex(“^1”,RegexOptions.IgnoreCase);
返回regex.IsMatch(msg.Text);
},(ctx,味精)=>
{
返回链。返回(“所述1”);
}),
新案例((msg)=>
{
var regex=new regex(“^2”,RegexOptions.IgnoreCase);
返回regex.IsMatch(msg.Text);
},(ctx,味精)=>
{
返回链。返回(“所述2”);
}),
新的DefaultCase((ctx,msg)=>
{
退货链。退货(“默认”);
})
).Unwrap().PostToUser();
公共异步任务StartAsync(IDialogContext上下文)
{
等待测试(上下文);
}
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable参数)
{
等待测试(上下文);
}
专用异步任务测试(IDialogContext上下文)
{
如果(真)
{
Wait(MessageReceivedAsync);
}
其他的
{
上下文。完成(“完成”);
}
}
}
有人经历过这种情况吗?我使用过chain dialog;然而,由于这些问题,也不支持一些想法,我更喜欢使用context.call和context.forward,它们写在dialog-to-chain-dialog中;然而,由于这些问题,并且也不支持某些想法,我更喜欢使用context.call和context.forward,它们是在dialog-to-chain对话框中编写的。