在 Orchard Core 中添加机器人
Add Bot in Orchard Core
我正在尝试在 Orchard Core CMS 应用程序中使用 Microsoft Bot Framework 添加 Bot。我对 Orchard Core 比较陌生,我已经使用 Orchard Core 模板设置了一个新项目。
问题背景/场景:
- 我想使用 Orchard Core 将机器人添加到我的网站
- 我已经使用 Orchard Core 模板创建了一个自定义模块,并且能够添加 ApiController 来处理特定的路由
- 我正在尝试使用 Microsoft Bot Framework SDK V4 构建机器人
我正在尝试使用 services.AddBot<MyBot>
添加我的机器人。我在构建过程中没有收到任何错误以及 运行.
- 默认使用
services.AddBot<MyBot>()
注册 URL /api/messages
我试过这个端点但无法访问我的 Bot
- 我了解 Orchard Core 处理路由,但可能不知道这一点 URL
这是我的问题:
- 有没有办法让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" 打算发送给机器人的请求。您有两种选择来解决此问题:
- 移动
.UseBotFramework()
使其位于任何其他路由映射之前,这样它将优先处理传入请求。
- 更改机器人将监听的路由,使其不与您的 API 控制器路由冲突。这是在
AddBot<YourBot>(…)
调用期间完成的,如下所示:
services.AddBot<YourBot>(options =>
{
options.Paths.BasePath = "bots";
});
这将导致路径变为 /bots/messages
。您也可以通过 options.Paths.MessagesPath
.
更改 /messages
我正在尝试在 Orchard Core CMS 应用程序中使用 Microsoft Bot Framework 添加 Bot。我对 Orchard Core 比较陌生,我已经使用 Orchard Core 模板设置了一个新项目。
问题背景/场景:
- 我想使用 Orchard Core 将机器人添加到我的网站
- 我已经使用 Orchard Core 模板创建了一个自定义模块,并且能够添加 ApiController 来处理特定的路由
- 我正在尝试使用 Microsoft Bot Framework SDK V4 构建机器人
我正在尝试使用
services.AddBot<MyBot>
添加我的机器人。我在构建过程中没有收到任何错误以及 运行.- 默认使用
services.AddBot<MyBot>()
注册 URL/api/messages
我试过这个端点但无法访问我的 Bot - 我了解 Orchard Core 处理路由,但可能不知道这一点 URL
- 默认使用
这是我的问题: - 有没有办法让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" 打算发送给机器人的请求。您有两种选择来解决此问题:
- 移动
.UseBotFramework()
使其位于任何其他路由映射之前,这样它将优先处理传入请求。 - 更改机器人将监听的路由,使其不与您的 API 控制器路由冲突。这是在
AddBot<YourBot>(…)
调用期间完成的,如下所示:
services.AddBot<YourBot>(options =>
{
options.Paths.BasePath = "bots";
});
这将导致路径变为 /bots/messages
。您也可以通过 options.Paths.MessagesPath
.
/messages