如何从Azure托管的Microsoft Bot向JavaScript发送字符串?
解决方案:从Azure托管Bot发送密钥字符串到JS脚本
首先,咱们得理清核心问题:默认的/api/messages端点是专门处理Bot Framework协议的POST请求的,所以你直接在MessagesController里加的自定义方法没法通过原路由访问。不过咱们可以利用Web API的路由特性,在同一个控制器(或者新建ApiController)里定义一个独立的公开端点来返回密钥。
步骤1:添加自定义Web API端点
因为你的Bot是基于Web API构建的(MessagesController继承自ApiController),可以直接在控制器里添加带显式路由的GET方法,不用依赖MVC的JsonResult/ActionResult:
using System.Web.Http; using System.Configuration; public class MessagesController : ApiController { // 原有的Bot消息处理方法(比如PostAsync)保留不变 // 新增的获取密钥端点 [HttpGet] [Route("api/disabledbotkey")] public IHttpActionResult GetDisabledBotKey() { // 从Azure应用配置中读取密钥(推荐这种方式,避免硬编码) string disabledBotKey = ConfigurationManager.AppSettings["DisabledBotKey"]; // 直接返回字符串,或者封装成JSON对象(看JS需求) if (!string.IsNullOrEmpty(disabledBotKey)) { return Ok(disabledBotKey); } else { return NotFound(); } } }
步骤2:配置Azure应用设置
在Azure门户的Bot App Service里,进入配置 > 应用程序设置,添加一个名为DisabledBotKey的设置,值填你的已停用机器人密钥。这样既安全又方便后续修改,不用重新部署代码。
步骤3:从JS脚本请求端点
现在你可以在前端JS里用fetch或者XMLHttpRequest请求这个新端点:
// 示例用fetch获取密钥 fetch('https://你的站点名.azurewebsites.net/api/disabledbotkey') .then(response => { if (!response.ok) { throw new Error('请求失败'); } return response.text(); // 因为返回的是纯字符串,用text()解析 }) .then(botKey => { // 拿到密钥后做你需要的操作 console.log('已停用机器人密钥:', botKey); }) .catch(error => { console.error('获取密钥出错:', error); });
关键注意事项
- 路由冲突问题:不要把自定义路由挂在
/api/messages下面,因为这个路由被Bot Framework的消息处理逻辑独占了,所以咱们用独立的路由比如/api/disabledbotkey。 - 安全性:如果这个密钥是敏感信息,建议给端点加验证(比如API密钥验证、Azure AD OAuth2),避免未授权访问。可以在方法上添加
[Authorize]特性或者自定义验证逻辑。 - 本地调试:本地测试时,确保你的Bot项目能正常启动,然后直接访问
http://localhost:3978/api/disabledbotkey(默认Bot端口是3978)验证是否能返回密钥。
内容的提问来源于stack exchange,提问作者bmo
相关产品推荐
相关产品推荐

