无限重定向循环到https

时间:2016-05-23 20:49:50

标签: asp.net-core azure-web-app-service

我根据这篇文章将这个简单的中间件添加到我的asp.net核心网络应用程序中:Redirect to HTTPS

if (!env.IsLocalhost())
{
            app.Use(async (context, next) =>
            {
                if (context.Request.IsHttps)
                {
                    await next();
                }
                else
                {
                    var withHttps = "https://" + context.Request.Host + context.Request.Path;
                    context.Response.Redirect(withHttps);
                }
            });
            app.UseMiddleware<RedirectHttpMiddleware>();
} 

部署到Azure后,我有一个无限的重定向循环。

我已经证实中间件正在导致无限循环(如果我将它注释掉循环消失)并且IsHttps确实是真的。

是否有人建议为何会发生这种情况?

2 个答案:

答案 0 :(得分:4)

在azure中运行时,这是一个已知问题。 https://github.com/aspnet/IISIntegration/issues/140

您可以通过在ConfigureSerivces中添加以下内容来解决此问题:

$ type ps

答案 1 :(得分:1)

我设法使用这段代码为RC1解决了这个问题:

app.Use(async (context, next) =>
            {
                String protoHeader = context.Request.Headers["X-Forwarded-Proto"];
                if (protoHeader.ToLower().Equals("https"))
                {
                    await next();
                }
                else
                {
                    var withHttps = "https://" + context.Request.Host + context.Request.Path;
                    context.Response.Redirect(withHttps);
                }
            });