Я использую несколько диалогов.Некоторые используют formbuilder, некоторые используют метод ResultAfter для настраиваемого запроса значений.Я хочу, чтобы метод проверял поступающие сообщения по выходным словам, таким как остановка, выход и т. Д.
Я думал, что функция StartAsync будет хорошим началом.Видя, что все диалоги пересылаются из моего RootDialog, я реализовал это в RootDialog:
public override async Task StartAsync(IDialogContext context)
{
string[] stopStrings = { "quit", "cancel", "exit" };
var msg = context.Activity.AsMessageActivity().Text;
if (stopStrings.Any(msg.Contains))
{
await context.PostAsync("You cancelled.");
context.Done(true);
}
else
{
context.Wait(this.MessageReceived);
}
}
Когда я спрашиваю бота "остановить", он успешно сообщает мне, что я отменил.Но в следующем сообщении, которое я отправляю, я получаю эту ошибку:
Exception thrown: 'System.Collections.Generic.KeyNotFoundException'
В этой строке в моем MessageController:
await Conversation.SendAsync(activity, () => new RootDialog());
Теперь я не уверен, какой ключ не найден и почемуэто посылает мне это.Помощь приветствуется!