Bot Framework回声机器人转小写中间件的配置问题
解决Echo Bot中间件未生效的问题
嘿,你已经写对了中间件类,也完成了服务注册,但问题出在你还没把这个中间件添加到Bot的处理管道中。只通过services.AddTransient<MiddlewareOne>()注册服务,只是把它放进了依赖注入容器,Bot的Adapter并不会自动使用它,必须手动把它加入中间件链才行。下面是具体的配置步骤:
步骤1:确认服务注册(你已完成,可跳过)
首先确保你在Startup.cs的ConfigureServices方法里已经注册了中间件服务:
services.AddTransient<MiddlewareOne>();
步骤2:将中间件添加到Adapter的管道中
这是关键的一步,根据你使用的Adapter类型(BotFrameworkAdapter或CloudAdapter),有两种配置方式:
方式一:使用自定义Adapter类(常见于传统模板)
如果你项目里有自定义的Adapter类(比如AdapterWithErrorHandler),在它的构造函数中注入你的中间件,然后通过Use()方法添加到管道:
public class AdapterWithErrorHandler : BotFrameworkAdapter { public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkAdapter> logger, MiddlewareOne middlewareOne) // 注入中间件 : base(configuration, logger) { // 把中间件加入处理管道 Use(middlewareOne); // 保留原有的错误处理逻辑 OnTurnError = async (turnContext, exception) => { logger.LogError(exception, $"[OnTurnError] unhandled error: {exception.Message}"); await turnContext.SendActivityAsync("Sorry, it looks like something went wrong."); }; } }
方式二:直接配置CloudAdapter(最新模板常用)
如果你的项目使用CloudAdapter,可以在Startup.cs的ConfigureServices中直接配置并添加中间件:
services.AddSingleton<CloudAdapter>(sp => { var auth = sp.GetRequiredService<ConfigurationBotFrameworkAuthentication>(); var adapter = new CloudAdapter(auth); var middlewareOne = sp.GetRequiredService<MiddlewareOne>(); // 添加中间件到管道 adapter.Use(middlewareOne); // 错误处理逻辑 adapter.OnTurnError = async (turnContext, exception) => { var logger = sp.GetRequiredService<ILogger<CloudAdapter>>(); logger.LogError(exception, $"[OnTurnError] unhandled error: {exception.Message}"); await turnContext.SendActivityAsync("Sorry, it looks like something went wrong."); }; return adapter; });
验证是否生效
配置完成后,运行Bot并发送一条消息,查看调试输出窗口:如果能看到两次打印的消息(一次是原始文本,一次是转小写后的文本),就说明你的中间件已经正常工作了。
内容的提问来源于stack exchange,提问作者Kuba K
相关产品推荐
相关产品推荐

