Asp.Net 5 中确保 SSL 的正确方法是什么
What is the proper way to ensure SSL in Asp.Net 5
我正在使用 MVC/Web Api 构建一个新的 ASP.NET 5 网站,并将其托管在 Azure 网站上。我目前是 运行 beta 8。
当我使用 POST 方法构建控制器时,我的问题来了。每当我部署到我的 Azure 网站时,调用 POST 总是会导致 502 Bad Gateway Error。 "The CGI Application encountered an error and the server terminated the process"。同样的方法在本地有效。
在对问题进行故障排除后,我将问题追溯到我编写的一个中间件,只要请求通过 HTTP 传入,它就会发送 302 重定向。 302 仅在 HTTPS 上将请求发送到相同的 host/path/query。
当我删除这个中间件时,POST 工作。显然这是导致问题的原因,但我有 2 个问题。
- 为什么重定向到 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 命令。
您有两个选择:
- 更改您的控制器操作以接受 GET 命令;
- 更改您的中间件并将其设置为 POST 而不是重定向;
刚找到 this on SO,其中包含可能对您有帮助的信息:
我正在使用 MVC/Web Api 构建一个新的 ASP.NET 5 网站,并将其托管在 Azure 网站上。我目前是 运行 beta 8。
当我使用 POST 方法构建控制器时,我的问题来了。每当我部署到我的 Azure 网站时,调用 POST 总是会导致 502 Bad Gateway Error。 "The CGI Application encountered an error and the server terminated the process"。同样的方法在本地有效。
在对问题进行故障排除后,我将问题追溯到我编写的一个中间件,只要请求通过 HTTP 传入,它就会发送 302 重定向。 302 仅在 HTTPS 上将请求发送到相同的 host/path/query。
当我删除这个中间件时,POST 工作。显然这是导致问题的原因,但我有 2 个问题。
- 为什么重定向到 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 命令。
您有两个选择:
- 更改您的控制器操作以接受 GET 命令;
- 更改您的中间件并将其设置为 POST 而不是重定向;
刚找到 this on SO,其中包含可能对您有帮助的信息: