ASP.NET Core Azure App Service httpContext.Request.Headers [“Host”] Value

时间:2017-06-21 13:19:44

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

今天面对奇怪的行为。 我们使用Azure App Services托管asp.net core 1.1 Web应用程序,并使用路由到特定控制器或区域的子域。 所以在我的SubdomainConstraint:IRouteConstraint中我使用

HttpContext.Request.Headers["Host"]

获取主机名。之前就像那样返回了smth

mywebsite.com or subdomain.mywebsite.com 

从今天(或可能是昨天)开始,它开始返回我的App Service名称而不是主机名。在localhost上一切正常。 列举

Context.Request.Headers

在我的一个视图中给了我localhost:

Accept : 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding : gzip, deflate, sdch, br
Accept-Language : ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,ca;q=0.2
Cookie : .AspNetCore.Antiforgery....
Host : localhost:37202
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Upgrade-Insecure-Requests : 1
Azure App Service中的

Connection : Keep-Alive
Accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding : gzip, deflate, sdch
Accept-Language : ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,ca;q=0.2
Cookie : AspNetCore.Antiforgery....
Host : mydeploymentname:80
Max-Forwards : 10
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Upgrade-Insecure-Requests : 1
X-LiveUpgrade : 1
X-WAWS-Unencoded-URL : /
X-Original-URL : /
X-ARR-LOG-ID : 9c76e796-84a8-4335-919c-9ca4rb745f4fefdfde
DISGUISED-HOST : mywebsite.com
X-SITE-DEPLOYMENT-ID : mydeploymentname
WAS-DEFAULT-HOSTNAME : mydeploymentname.azurewebsites.net
X-Forwarded-For : IP:56548
MS-ASPNETCORE-TOKEN : a97b93ba-6106-4301-87b2-8af9a929d7dc
X-Original-For : 127.0.0.1:55602
X-Original-Proto : http

我可以从

获得我需要的东西
Headers["DISGUISED-HOST"]

但是在重定向到登录页面时遇到问题,它会使用我的部署名称重定向到错误的URL。

想知道我是否可以在任何地方弄乱一些东西。但是我们已经在几天前进行了最后一次部署,之后它运行良好。

1 个答案:

答案 0 :(得分:2)

这是由部署到Azure App Service中的少量应用程序的AspNetCoreModule中的回归引起的。这个问题正在调查中。请关注this thread状态。

以下是在部署修补程序之前可以使用的解决方法:在Configure方法中(通常在startup.cs中),添加以下内容:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.Use((ctx, next) =>
        {
            string disguisedHost = ctx.Request.Headers["DISGUISED-HOST"];
            if (!String.IsNullOrWhiteSpace(disguisedHost))
            {
                ctx.Request.Host = new Microsoft.AspNetCore.Http.HostString(disguisedHost);
            }
            return next();
        });

        // Rest of your code here...

    }