C#| MS BotBuilder | DefaultIfException的用法

C#| MS BotBuilder | DefaultIfException的用法,c#,botframework,botbuilder,C#,Botframework,Botbuilder,我正在尝试查找一些有关如何在MS Bot builder SDK中使用DefaultIfException的文档。据我所知,没有关于它使用的文档 我们试图避免向用户发布“对不起,我的机器人程序代码有问题”消息。使用DefaultIfException会执行它所说的操作并“停止异常的传播”,但是我不确定如何发布自己的错误消息,而不是什么都不发布 如果我们有办法告诉bot框架使用自定义错误对话框类或类似的东西,那就太好了 编辑代码示例: wait Conversation.SendAsync(活动

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

我们试图避免向用户发布“对不起,我的机器人程序代码有问题”消息。使用DefaultIfException会执行它所说的操作并“停止异常的传播”,但是我不确定如何发布自己的错误消息,而不是什么都不发布

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

编辑代码示例:

wait Conversation.SendAsync(活动,()=>newrootdialog().DefaultIfException());
其中,
RootDialog()
是我们的一个自定义对话框类,它只实现了
IDialog

您会注意到,如果您实现了
IDialog
,您就可以访问
公共异步任务StartAsync(IDialogContext上下文)
。在这个方法中,我们调用
context.Wait(MessageReceivedAsync),它有以下内容:
public async Task MessageReceivedAsync(IDialogContext上下文,IAwaitable参数)

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

需要明确的是,我们实际上并没有使用DefaultIfException,因为它不允许我们使用自己的错误消息。但是,如果您只是想停止错误传播,可以使用just DefaulIfException,我将按如下方式修改代码:

[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));
        }
    }
[可序列化]
公共密封类ErrorMessageDialog:IDialog其中E:Exception
{
公共只读IDialog先行项;
公共错误消息对话框(IDialog先行项)
{
SetField.NotNull(不包括此.Antecedent、nameof(Antecedent)、Antecedent);
}
异步任务IDialog.StartAsync(IDialogContext上下文)
{
调用(this.Antecedent,ResumeAsync);
}
专用异步任务ResumeAync(IDialogContext上下文,IAwaitable结果)
{
尝试
{
上下文。完成(等待结果);
}
捕获(E)
{
等待上下文。PostAsync(“对不起”);
context.Done(缺省值(T));
}
}

Hey您可以提供一些示例代码来说明如何防止显示默认错误消息。Hi@Satheesh我用于停止默认异常传播的代码如下:…检查问题我已用code@JPThome非常感谢。这很有帮助