今天面对奇怪的行为。 我们使用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。
想知道我是否可以在任何地方弄乱一些东西。但是我们已经在几天前进行了最后一次部署,之后它运行良好。
答案 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...
}