2016-05-23 4 views
1

Я добавил этот простой кусок промежуточного слоя на мой основной asp.net веб-приложение в соответствии с этой должности: Redirect to HTTPSБесконечный цикл редирект 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>(); 
} 

После развертывания на Лазурном есть бесконечный цикл перенаправления.

Я проверил, что промежуточное программное обеспечение вызывает бесконечный цикл (если я прокомментирую его, цикл уходит) и что IsHttps действительно истинно.

Есть ли у кого-нибудь предложение, почему это происходит?

ответ

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

'app.UseIISIntegration()' должен сделать это для вас в RC1. – Tratcher

+0

Хорошо, я ценю подсказку. Попробуй это в следующий раз, когда у меня будет возможность улучшить. –

4

Это известная проблема при работе в лазурном режиме. https://github.com/aspnet/IISIntegration/issues/140

Вы можете обойти его, добавив следующее в ConfigureSerivces:

 services.Configure<ForwardedHeadersOptions>(options => 
     { 
      options.ForwardedHeaders = ForwardedHeaders.XForwardedProto 
     }); 
+0

Thx вы так много! Попробуй сразу. –

+0

Я могу подтвердить, что это исправляет проблему. Важно отметить, что этот вопрос был исправлен в RTM, ожидаемом 27 июня 2016 года. – Ketrex

+0

@Tratcher Хотя я считаю, что это правильный ответ, я все еще не могу его проверить, потому что приведенный выше код основан на RC2, и мы используем RC1. Может ли кто-нибудь предложить, что делать при работе с RC1? –

Смежные вопросы