基于IIS+ARR反向代理实现ASP.NET Core 6与Rasa通信
ASP.NET Core 6(IIS HTTPS)与Rasa(HTTP)通信解决方案
核心问题原因
浏览器存在混合内容限制:HTTPS页面不允许发起HTTP请求,这是部署到IIS后通信失败的根本原因。本地VS调试正常是因为开发环境未严格执行该限制,或本地Web应用使用HTTP协议。
解决步骤:IIS ARR反向代理配置 + 代码调整
一、安装ARR与URL Rewrite组件
- 打开服务器管理器,选择「添加角色和功能」
- 定位到「Web服务器(IIS)」→「应用程序开发」,勾选以下组件:
- Application Request Routing (ARR)
- URL Rewrite
- 完成安装后重启IIS
二、启用ARR代理功能
- 打开IIS管理器,点击左侧服务器节点
- 找到并双击「Application Request Routing Cache」
- 在右侧操作栏点击「Server Proxy Settings」,勾选「Enable proxy」,点击「应用」保存
三、配置站点反向代理规则
针对你的ASP.NET Core站点,添加URL重写规则:
- 选中目标站点,双击「URL Rewrite」
- 右侧点击「添加规则」→「空白规则」,名称设为「Rasa Proxy」
- 匹配URL:
- 请求路径:
^rasa/(.*) - 使用:「正则表达式」
- 请求路径:
- 操作:
- 操作类型:「Rewrite」
- 重写URL:
http://localhost:5005/{R:1} - 勾选「Append query string」
- 点击「应用」保存
四、代码调整(必须修改)
原来硬编码的http://localhost:5005请求地址需要改为反向代理的HTTPS路径,推荐通过配置文件管理:
- 在
appsettings.json中添加Rasa配置:
"Rasa": { "BaseUrl": "/rasa/" }
- 在
Program.cs中注册HttpClient时注入BaseAddress:
builder.Services.AddHttpClient<IRasaService, RasaService>(client => { client.BaseAddress = new Uri(builder.Configuration["Rasa:BaseUrl"] ?? "/rasa/"); });
- 修改
RasaService中的请求地址:
将原来的硬编码地址改为相对路径:
var response = await _httpClient.PostAsync( "webhooks/rest/webhook", // 不再使用http://localhost:5005前缀 content );
验证与注意事项
- 测试反向代理:用Postman向
https://你的站点域名/rasa/webhooks/rest/webhook发送POST请求,应能正常获取Rasa响应 - 确保Rasa服务正常运行并监听
localhost:5005,IIS应用程序池权限需允许访问该端口 - 若Rasa的Action Server(
localhost:5055)也需要被外部HTTPS访问,可重复上述反向代理配置步骤,添加对应规则
内容的提问来源于stack exchange,提问作者T_MAC_1
相关产品推荐
相关产品推荐

