asp.net-mvc - 在 Asp.Net 5 中确保 SSL 的正确方法是什么

标签 asp.net-mvc asp.net-web-api asp.net-core asp.net-core-mvc

我正在使用 MVC/Web Api 构建一个新的 ASP.NET 5 网站,并将其托管在 Azure 网站上。我目前正在运行 beta 8。

当我使用 POST 方法构建 Controller 时,我的问题出现了。每当我部署到我的 Azure 网站时,调用 POST 总是会导致 502 Bad Gateway 错误。 “CGI 应用程序遇到错误,服务器终止了该进程”。同样的方法在本地也适用。

对问题进行故障排除后,我将问题追溯到我编写的一个中间件,该中间件本质上是每当请求通过 HTTP 传入时都会发送 302 重定向。 302 仅通过 HTTPS 将请求发送到同一主机/路径/查询。

当我删除这个中间件时,POST 可以工作。显然这是导致问题的原因,但我有两个问题。

  1. 为什么重定向到 HTTPS 会导致执行 POST 失败
  2. 确保请求通过 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/

相关文章:

c# - 挣扎于 ASP.NET MVC 自动脚手架模板

javascript - 添加到可观察数组时, knockout 模板不会更新列表

asp.net-mvc - MVC 4 - View /部分 View 和表单 - 如何仅更新提交的部分 View ?

javascript - 在启动模式窗口上启动 ajax (ASP.NET MVC)

api - 用于高级搜索/过滤的 .Net Web API URL 约定

javascript - 从 AngularJS 将复杂对象传递给 WebAPI

asp.net - 401 向 web api 发送 ajax 请求时未经授权

c# - HttpContext 头

ssl - 使用 Kestrel 在 ASP.NET Core 中实现 SSL

c# - 为什么我需要创建一个返回 DateTime.Now 而不是直接使用 DateTime.Now 的 DateTime 服务?