今天遇到奇怪的行为。 我们使用 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/