UrlHelper 在 Azure 应用服务上返回 http 链接
UrlHelper returning http links on Azure App Service
我有一项服务部署在 Azure App Services returns http
links 而不是 https
links 当使用 UrlHelper
.在我的开发机器上测试时,它 returns https
link 符合预期,并且该服务可用并通过 https
请求访问。
我尝试使用的启动路线类型示例是:
routes.MapRoute(
"FooBar",
"api/Foo/{Id}/Bar");
然后 link 使用以下方法构建:
IUrlHelper _urlHelper = // Injected into class via service registration
int id = 42; // Arbitrary value for example
_urlHelper.Link("FooBar", new {Id = id});
当 运行 在我的本地计算机上使用 Windows 上的 Docker 来自 Visual Studio 我得到 link 的 https://localhost:1234/api/Foo/42/Bar
,但是我在 Azure 上部署了 Linux 容器应用服务,我得到了 http://my-app-name.azurewebsites.net/api/Foo/42/Bar
.
我不知道我做错了什么得到 http
link 而不是 https
link,如果有任何 [=31],我将不胜感激=] 方向正确。
所以我发现解决方案是 ASP.Net 核心应用程序本身的配置。我进行了以下修改,然后一切正常:
已将 app.UseForwardedHeaders();
添加到请求管道。
向服务容器注册添加了以下代码段:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
需要清除 KnownNetworks
和 KnownProxies
,因为它们默认采用 IIS 托管环境。为了额外的安全,您可以添加已知的 proxy/network IP 而不是在此处清除它们。
我有一项服务部署在 Azure App Services returns http
links 而不是 https
links 当使用 UrlHelper
.在我的开发机器上测试时,它 returns https
link 符合预期,并且该服务可用并通过 https
请求访问。
我尝试使用的启动路线类型示例是:
routes.MapRoute(
"FooBar",
"api/Foo/{Id}/Bar");
然后 link 使用以下方法构建:
IUrlHelper _urlHelper = // Injected into class via service registration
int id = 42; // Arbitrary value for example
_urlHelper.Link("FooBar", new {Id = id});
当 运行 在我的本地计算机上使用 Windows 上的 Docker 来自 Visual Studio 我得到 link 的 https://localhost:1234/api/Foo/42/Bar
,但是我在 Azure 上部署了 Linux 容器应用服务,我得到了 http://my-app-name.azurewebsites.net/api/Foo/42/Bar
.
我不知道我做错了什么得到 http
link 而不是 https
link,如果有任何 [=31],我将不胜感激=] 方向正确。
所以我发现解决方案是 ASP.Net 核心应用程序本身的配置。我进行了以下修改,然后一切正常:
已将 app.UseForwardedHeaders();
添加到请求管道。
向服务容器注册添加了以下代码段:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
需要清除 KnownNetworks
和 KnownProxies
,因为它们默认采用 IIS 托管环境。为了额外的安全,您可以添加已知的 proxy/network IP 而不是在此处清除它们。