我有一个服务,当部署在 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();
});
需要清除KnownNetworks
和KnownProxies
,因为它们默认采用 IIS 托管环境。为了提高安全性,您可以添加已知的代理/网络 IP,而不是在此处清除它们。