我正在使用 MVC/Web Api 构建一个新的 ASP.NET 5 网站,并将其托管在 Azure 网站上。我目前正在运行 beta 8。
当我使用 POST 方法构建 Controller 时,我的问题出现了。每当我部署到我的 Azure 网站时,调用 POST 总是会导致 502 Bad Gateway 错误。 “CGI 应用程序遇到错误,服务器终止了该进程”。同样的方法在本地也适用。
对问题进行故障排除后,我将问题追溯到我编写的一个中间件,该中间件本质上是每当请求通过 HTTP 传入时都会发送 302 重定向。 302 仅通过 HTTPS 将请求发送到同一主机/路径/查询。
当我删除这个中间件时,POST 可以工作。显然这是导致问题的原因,但我有两个问题。
- 为什么重定向到 HTTPS 会导致执行 POST 失败
- 确保请求通过 HTTPS 传入的正确方法是什么。
我的中间件代码:
if(!context.Request.IsHttps){
var withHttps = "https://" + context.Request.Host + context.Request.Path;
if(context.Request.QueryString.HasValue){
withHttps += context.Request.QueryString.Value;
}
context.Response.Redirect(withHttps);
}
else{
if(m_Next != null)
await m_Next(context);
}
最佳答案
问题是将 POST HTTP 命令重定向为 GET 命令。
你有两个选择:
- 更改 Controller 操作以接受 GET 命令;
- 更改您的中间件并使其以 POST 方式而不是重定向;
刚刚找到this on SO ,其中包含可能对您有帮助的信息:
关于asp.net-mvc - 在 Asp.Net 5 中确保 SSL 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33457475/