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

时间:2015-10-31 22:53:11

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

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

当我使用POST方法构建控制器时出现了问题。每当我部署到我的Azure网站时,调用POST总会导致502 Bad Gateway Error。 “CGI应用程序遇到错误,服务器终止了该过程”。这种方法在本地工作。

在对问题进行故障排除之后,我将问题追溯到我编写的一个中间件,实际上每当请求进入HTTP时就会发送302重定向。 302仅在HTTPS上将请求发送到相同的主机/路径/查询。

当我删除此中间件时,POST工作。显然这导致了这个问题,但我有两个问题。

  1. 为什么重定向到HTTPS会导致执行POST失败
  2. 确保请求通过HTTPS进入的正确方法是什么。
  3. 我的中间件代码:

    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);
    }
    

1 个答案:

答案 0 :(得分:1)

问题是将POST HTTP命令的更改重定向到GET命令。

您有两种选择:

  • 将您的控制器操作更改为接受GET命令;
  • 更改中间件并将其设为POST而不是重定向;

刚刚找到this on SO,它有可能对您有所帮助的信息:

相关问题