在 Orchard Core 中添加机器人

Add Bot in Orchard Core

我正在尝试在 Orchard Core CMS 应用程序中使用 Microsoft Bot Framework 添加 Bot。我对 Orchard Core 比较陌生,我已经使用 Orchard Core 模板设置了一个新项目。

问题背景/场景:

这是我的问题: - 有没有办法让Orchard Core知道这条路线? - 最终我希望能够在我的 Orchard Core CMS 站点中的多个租户下启用此模块

使用 OrchardCore,您可以通过覆盖 StartupBase 中的 Configure 方法来插入路由构建器。我假设您要在已经从 StartupBase 继承的自定义 Startup class 中添加 services.AddBot?

看看 StartupBase 中的另一个覆盖

public override void Configure(IApplicationBuilder app, IRouteBuilder routes, IServiceProvider serviceProvider)
{
    routes.MapAreaRoute(
        name: "a-route-name",
        areaName: "area-name",
        template: "api/messages",
        defaults: new { controller = "Bot", action = "Index" }
    );
}

您需要找出 UseBotFramework 使用的正确路径

因此,我将根据有根据的猜测,您 运行 遇到了在启动期间向 IApplicationBuilder 注册处理程序的顺序问题。如果您不知道,您在应用程序构建器上映射内容的顺序 确实 很重要。

因为你有一个现有的代码库,所以我猜测当你添加机器人时你在最后添加了 .UseBotFramework() 调用。由于 UseBotFramework() 默认情况下会在 /api/messages 下注册您的机器人,因此您已经映射的现有 MVC 路由很可能是 "swallowing" 打算发送给机器人的请求。您有两种选择来解决此问题:

  1. 移动 .UseBotFramework() 使其位于任何其他路由映射之前,这样它将优先处理传入请求。
  2. 更改机器人将监听的路由,使其不与您的 API 控制器路由冲突。这是在 AddBot<YourBot>(…) 调用期间完成的,如下所示:
services.AddBot<YourBot>(options => 
{
    options.Paths.BasePath = "bots";
});

这将导致路径变为 /bots/messages。您也可以通过 options.Paths.MessagesPath.

更改 /messages