How do I get the full url of the page I am on in C#

Viewed 213346

I need to be able to get at the full URL of the page I am on from a user control. Is it just a matter of concatenating a bunch of Request variables together? If so which ones? Or is there a more simpiler way?

10 Answers

I usually use Request.Url.ToString() to get the full url (including querystring), no concatenation required.

Request.Url.AbsoluteUri

This property does everything you need, all in one succinct call.

For ASP.NET Core you'll need to spell it out:

var request = Context.Request;
@($"{ request.Scheme }://{ request.Host }{ request.Path }{ request.QueryString }")

Or you can add a using statement to your view:

@using Microsoft.AspNetCore.Http.Extensions

then

@Context.Request.GetDisplayUrl()

The _ViewImports.cshtml might be a better place for that @using

if you need the full URL as everything from the http to the querystring you will need to concatenate the following variables

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

Thanks guys, I used a combination of both your answers @Christian and @Jonathan for my specific need.

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

I don't need to worry about secure http, needed the servername variable and the RawUrl handles the path from the domain name and includes the querystring if present.

If you need the port number also, you can use

Request.Url.Authority

Example:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

Try the following -

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
Related