ASP.NET Core Azure 应用服务 httpContext.Request.Headers ["Host"] 值

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

今天遇到奇怪的行为。 我们使用 Azure 应用服务托管 asp.net core 1.1 Web 应用程序,并使用路由到特定 Controller 或区域的子域。 所以在我的 SubdomainConstraint: IRouteConstraint 中我使用

HttpContext.Request.Headers["Host"]

获取主机名。之前返回的是这样的

mywebsite.com or subdomain.mywebsite.com 

从今天(或者可能是昨天)开始,它开始返回我的应用服务名称而不是主机名。在本地主机上一切正常。 通过枚举

Context.Request.Headers

在我的 View 之一中给了我本地主机:

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 应用服务中:

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。

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

最佳答案

这是由部署到 Azure 应用服务中少量应用的 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...

    }

关于ASP.NET Core Azure 应用服务 httpContext.Request.Headers ["Host"] 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677338/

相关文章:

asp.net - 将 session 变量或自定义字段添加到 Elmah 错误日志表

java - HttpPost到asp服务器上(HTML形式)

asp.net - 如何将表单从 HTML POST 到 ASPX 页面

c# - PDFsharp 在 Azure 中生成空白页面,但在本地工作

asp.net-core - 如何从@context.User 获取用户的名字或姓氏?

c# - 在 DbContext.OnConfiguring 和 AspCore Startup.ConfigureServices 中定义 optionsBuilder 时的预期结果是什么?

c# - CSV 导出 Response.End 抛出异常

azure - 我想使用适用于我的 Xamarin 应用程序的 xamarin Azure SDK 备份和还原 SQLite 数据库文件

Azure Databricks - 无法将结果从 Databricks 导出到 blob

asp.net-core - 用于身份验证的 Azure Active Directory 和用于授权的 ASP.NET Core Identity