UrlHelper 在 Azure 应用服务上返回 http 链接



我有一个服务,当部署在 Azure 应用服务上时,在使用UrlHelper时返回http链接而不是https链接。在我的开发计算机上进行测试时,它会按预期返回https链接,并且该服务可用并通过https请求进行访问。

我尝试使用的初创公司的路由类型的一个例子是:

routes.MapRoute(
"FooBar",
"api/Foo/{Id}/Bar");

然后使用以下方法构建链接:

IUrlHelper _urlHelper = // Injected into class via service registration
int id = 42; // Arbitrary value for example
_urlHelper.Link("FooBar", new {Id = id});

当从Visual Studio使用Windows上的Docker在本地计算机上运行时,我得到了https://localhost:1234/api/Foo/42/Bar的链接,但是在Azure上部署的Linux容器应用服务上,我得到了http://my-app-name.azurewebsites.net/api/Foo/42/Bar

我不知道我做错了什么来获得http链接而不是https链接,并希望任何建议/指向正确的方向。

所以我发现解决方案是配置 ASP.Net Core应用程序本身。我执行了以下修改,然后一切正常:

向请求管道添加了app.UseForwardedHeaders();

将以下代码片段添加到服务容器注册:

services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});

需要清除KnownNetworksKnownProxies,因为它们默认采用 IIS 托管环境。为了提高安全性,您可以添加已知的代理/网络 IP,而不是在此处清除它们。

最新更新