5

How to get the full public URL of ASP.NET Core

 2 years ago
source link: https://swimburger.net/blog/dotnet/how-to-get-the-full-public-url-of-aspdotnet-core
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

How to get the full public URL of ASP.NET Core

Niels Swimberghe

Niels Swimberghe - 4/24/2022 - .NET

Follow me on Twitter, buy me a coffee

URLs are what makes the web the web. In ASP.NET Core Controllers, Razor Pages, and Razor views, there's a Request property which gives you access to the HttpRequest instance. The HttpRequest object gives you access to scheme, host (which is the domain and port), path, query string, body content, and headers of the incoming HTTP request.

If you need to know what the full URL is of your web application, you can put the URL together by grabbing the Scheme, Host, PathBase, Path, and QueryString and combining it like this:

$"{Request.Scheme}://{Request.Host}{Request.PathBase}{Request.Path}{Request.QueryString}"

Maybe you're only interested in the URL without the path and query string, in which case you can omit the PathBase, Path, and QueryString parameter from the string interpolation:

$"{Request.Scheme}://{Request.Host}"

If you want to generate URLs for your application, I suggest you use the UrlHelper as explained in this blog post about generating absolute URLs.

If you're using Minimal APIs, there's no Request property accessible to you, but you can accept an instance of HttpRequest as a parameter to your endpoint callback like this:

app.MapGet("/hello-world", (HttpRequest request) =>
    {
        return $"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}";
    }
);

What if there's no HTTP request?

If there is no HTTP request that you're handling in your code, like when you're doing some background processing using a BackgroundWorker, you'll need to get the scheme and host some other way. You could store your desired scheme and host into your configuration, or combine them together in a single property and store it into your configuration. Once configured, extract it from configuration and use it to build your absolute URL.

Be mindful of the fact that web application can be requested from multiple URLs depending on the network and infrastructure configuration. So even though you could simply store the full public URL in configuration, that may not be the only URL that users use.

Topics
Author

Niels Swimberghe

Niels Swimberghe

Niels Swimberghe is a Belgian Full Stack Developer solving problems and delivering value to customers using .NET technologies for back-end systems, and modern JavaScript technologies for the front-end.

Found this article useful? Follow me on Twitter, buy me a coffee, add this blog to your feed reader!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK