gpt4 book ai didi

C# | MS BotBuilder | DefaultIfException 的用法

转载 作者:行者123 更新时间:2023-11-30 15:20:02 29 4
gpt4 key购买 nike

我正在尝试查找有关如何在 MS Bot 构建器 SDK 中使用 DefaultIfException 的一些文档。据我所知,没有关于其用法的文档。

我们正在努力避免向用户发布“抱歉,我的机器人代码有问题”消息。使用 DefaultIfException 会按照它所说的那样“停止异常的传播”,但是我不确定如何发布我自己的错误消息,而不是什么都不发布。

如果我们有办法告诉机器人框架使用自定义错误对话框类或类似的东西,那就太好了。

编辑代码示例:
await Conversation.SendAsync(activity, () => new RootDialog().DefaultIfException());
在哪里RootDialog()是我们的自定义对话框类,它简单地实现了IDialog<object>

如果您实现 IDialog<object>,您会注意到您可以访问 public async Task StartAsync(IDialogContext context) .在这个方法中我们调用context.Wait(MessageReceivedAsync); ,然后有这个:public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)

在这个方法中,我们处理消息,并将处理包装在 try-catch 中,然后我们在其中处理错误。

要清楚 - 我们实际上并没有使用 DefaultIfException,因为它不允许我们使用我们自己的错误消息。但是如果你只是想停止错误传播,你可以只使用 DefaulIfException

最佳答案

我会修改 DefaultIfExceptionDialog 中的代码如下:

[Serializable]
public sealed class ErrorMessageDialog<T, E> : IDialog<T> where E : Exception
{
public readonly IDialog<T> Antecedent;
public ErrorMessageDialog(IDialog<T> antecedent)
{
SetField.NotNull(out this.Antecedent, nameof(antecedent), antecedent);
}
async Task IDialog<T>.StartAsync(IDialogContext context)
{
context.Call<T>(this.Antecedent, ResumeAsync);
}
private async Task ResumeAsync(IDialogContext context, IAwaitable<T> result)
{
try
{
context.Done(await result);
}
catch (E)
{
await context.PostAsync("sorry");
context.Done(default(T));
}
}

关于C# | MS BotBuilder | DefaultIfException 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41218861/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com