我根据这篇文章将这个简单的中间件添加到我的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确实是真的。
是否有人建议为何会发生这种情况?
答案 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);
}
});