asp.net-coreasp.net-mvc-routingazure-web-app-serviceurlhelper

UrlHelper returning http links on Azure App Service


I have a service that when deployed on Azure App Services returns http links instead of https links when using UrlHelper. When testing on my development machine it returns https links as expected, and the service is available and accessed through https requests.

An example of the type of route from my startup I'm trying to use is:

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

The link is then constructed using:

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

When running on my local machine using Docker on Windows from Visual Studio I get a link of https://localhost:1234/api/Foo/42/Bar, but on my deployed Linux Container App Service on Azure I get http://my-app-name.azurewebsites.net/api/Foo/42/Bar.

I don't know what I'm doing wrong to get an http link instead of an https link, and would appreciate any advice/pointing in the right direction.


Solution

  • So I found the solution was with the configuration of the ASP.Net Core app itself. I performed the following modifications and then everything worked correctly:

    Added app.UseForwardedHeaders(); to the request pipeline.

    Added the following snippet to service container registration:

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

    The KnownNetworks and KnownProxies need to be cleared as they default to assuming an IIS hosting environment. For extra security you can add the known proxy/network IPs instead of clearing them here.