BotFramework C#中实现循环Prompt直至输入验证通过的技术问询
搞定自定义日期验证Prompt,循环提示直到输入有效
我来帮你完善这个继承PromptString的自定义Prompt类,核心是要重写验证逻辑,让它能检查用户输入的是不是有效日期,同时触发重试机制。这里是完整的可运行代码:
namespace CustomPromptDemo.Models { public class CustomPrompt : PromptString { // 复用父类构造,设置默认提示、重试文本和最大重试次数 public CustomPrompt(string Prompt = "Please enter a date", string Retry = "Please enter a valid date!!!", int RetryCount = 3) : base(Prompt, Retry, RetryCount) { } // 重写输入验证方法,这是实现日期校验的核心 protected override async Task<ValidateResult> ValidateInputAsync(IDialogContext context, string input) { // 尝试把用户输入解析成日期 if (DateTime.TryParse(input, out DateTime validDate)) { // 输入有效,返回成功结果,还可以把日期格式化后返回 return new ValidateResult { IsValid = true, Value = validDate.ToString("yyyy-MM-dd") }; } else { // 输入无效,返回失败,触发重试提示 return new ValidateResult { IsValid = false }; } } // 可选:自定义提示消息,比如加个格式示例帮用户理解 protected override IMessageActivity MakePrompt(IDialogContext context, string prompt, IReadOnlyList<string> options = null, IReadOnlyList<string> descriptions = null) { var message = base.MakePrompt(context, prompt, options, descriptions); // 额外加一行格式提示,降低用户输入错误率 message.Text += "\n示例格式:2024-05-20"; return message; } } }
关键细节说明:
ValidateInputAsync是核心:这个方法负责检查用户输入的有效性,用DateTime.TryParse判断输入是否能转成合法日期。有效就返回成功,无效就返回失败,父类会自动处理重试逻辑。- 构造函数复用父类逻辑:直接用父类的参数设置默认提示、重试文本和最多重试3次,不用重复造轮子。
- 自定义提示(可选):重写
MakePrompt可以给提示消息加额外信息,比如日期格式示例,用户更容易知道该怎么输入。
怎么用这个Prompt?
在你的对话流程里这样调用就行:
public async Task StartAsync(IDialogContext context) { // 实例化自定义Prompt,也可以传入自定义的提示文本 var datePrompt = new CustomPrompt(RetryCount: 3); // 调用Prompt,指定输入完成后的回调方法 context.Call(datePrompt, AfterDateReceivedAsync); } private async Task AfterDateReceivedAsync(IDialogContext context, IAwaitable<string> result) { try { // 获取用户输入的有效日期 var validDate = await result; await context.PostAsync($"你输入的有效日期是:{validDate}"); } catch (TooManyAttemptsException) { // 处理重试次数用完的情况 await context.PostAsync("重试次数过多,对话结束啦。"); } context.Done<object>(null); }
这样一来,用户输入无效日期时,会自动弹出重试提示,最多试3次;输入正确日期就会进入后续处理逻辑,完美符合你的需求~
内容的提问来源于stack exchange,提问作者Kunal Mukherjee
相关产品推荐
相关产品推荐

