如何解决松弛的互动请求未达到指定的ASP.NET控制器操作
我正在开发SaaS应用程序,它将使用其交互式消息传递功能集成到Slack中。现在,我设法使所有内容都能在本地计算机上工作(使用ngrok)-当我在Slack中单击按钮时,它向我在配置中设置的URL发出HTTP POST
请求,并且能够处理并发送响应。到目前为止一切顺利。
但是,在我的生产环境中,我将nginx用作反向代理服务器,并且我的应用程序在Docker容器内在其后面运行。由于某种原因,根本不会调用应该处理Slack传入请求的环境控制器操作。如果我手动发出相同的请求(使用Insomnia),则会在控制器内部调用正确的操作。我怀疑这可能与
有关该请求的正文将包含有效负载参数。您的应用程序应将此有效负载参数解析为JSON。
知道我已采取行动
[HttpPost]
public async Task<IActionResult> Interactive(string payload)
路由配置中没有花哨的内容
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
});
在我的日志中,看起来像这样
手动请求:
wget --quiet \
--method POST \
--header 'content-type: application/x-www-form-urlencoded' \
--body-data 'payload=[correct json as in Slack documentation]' \
--output-document \
- https://application.com/slack/interactive
结果
Request starting HTTP/1.1 POST http://application.com/slack/interactive application/x-www-form-urlencoded 2095
Executing endpoint 'Application.Controllers.SlackController.Interactive (Application)'
Route matched with {action = "Interactive",controller = "Slack"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] Interactive(System.String) on controller Application.Controllers.SlackController (Application).
Request finished in 127.2643ms 302
Slack本身发出的请求
Request starting HTTP/1.1 POST http://application.com/slack/interactive application/x-www-form-urlencoded 3029
Request finished in 108.7831ms 302
缺少表明正在调用适当操作的日志。
因为它在我的本地主机上可以正常工作,所以我怀疑它必须与此反向代理组件相关(它似乎比在Docker容器中运行引起的可能性更大,但谁知道呢?)
Ngnix的配置如下
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
# listen 80;
# listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /var/ssl/fullchain.pem;
ssl_certificate_key /var/ssl/privkey.pem;
client_max_body_size 100M;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
resolver 127.0.0.11 valid=5s;
set $upstream http://application;
location / {
proxy_pass $upstream;
proxy_http_version 1.1;
proxy_ssl_certificate /var/ssl/fullchain.pem;
proxy_ssl_certificate_key /var/ssl/privkey.pem;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
我尝试更改方法签名,但没有成功。我对nginx经验不足,它充当反向代理,无法自己解决任何与配置相关的问题。我真的很想知道这种奇怪行为可能与什么有关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。