在果园核心中添加Bot

时间:2019-02-01 15:58:29

标签: c# routing .net-core botframework orchardcms

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

问题上下文/场景:

  • 我想使用Orchard Core将Bot添加到我的网站中
  • 我已经使用Orchard Core模板创建了一个自定义模块,并能够添加ApiController来处理特定路线
  • 我正在尝试使用Microsoft Bot Framework SDK V4构建Bot
  • 我正在尝试使用services.AddBot<MyBot>添加Bot。在构建和运行期间我都没有收到任何错误。

    • 默认情况下,使用services.AddBot<MyBot>()注册URL /api/messages时,我尝试了此终结点,但无法访问我的Bot
    • 我知道Orchard Core会处理路由,并且可能不知道此URL

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

2 个答案:

答案 0 :(得分:1)

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

因为您已有代码库,所以我想猜想,当您添加漫游器时,您在末尾添加了.UseBotFramework()调用。由于UseBotFramework()默认情况下会在/api/messages下注册您的漫游器,因此您已经映射的现有MVC路由很有可能会“吞噬”打算发往该漫游器的请求。您有两种选择可以解决此问题:

  1. 移动.UseBotFramework(),使其在任何其他路由映射之前,以便在处理传入请求时首先遇到麻烦。
  2. 更改漫游器将侦听的路由,以使其与您的API控制器路由不冲突。可以在AddBot<YourBot>(…)调用期间完成,如下所示:
services.AddBot<YourBot>(options => 
{
    options.Paths.BasePath = "bots";
});

这将导致路径变为/bots/messages。如果需要,也可以通过/messages来更改options.Paths.MessagesPath

答案 1 :(得分:0)

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

看看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使用的正确路线