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

C#asp.netUser Controls

C# Problem Overview


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?

C# Solutions


Solution 1 - C#

Here is a list I normally refer to for this type of information:

Request.ApplicationPath :	/virtual_dir
Request.CurrentExecutionFilePath :	/virtual_dir/webapp/page.aspx
Request.FilePath :	/virtual_dir/webapp/page.aspx
Request.Path :	/virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :	d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :	/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :	/virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :	http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :	localhost
Request.Url.Authority :	localhost:80
Request.Url.LocalPath :	/virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :	/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :	80
Request.Url.Query :	?q=qvalue
Request.Url.Scheme :	http
Request.Url.Segments :	/
 	virtual_dir/
 	webapp/
 	page.aspx

Hopefully you will find this useful!

Solution 2 - C#

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

Solution 3 - C#

Request.Url.AbsoluteUri

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

Solution 4 - C#

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

Solution 5 - C#

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")

Solution 6 - C#

Request.RawUrl

Solution 7 - C#

Better to use Request.Url.OriginalString than Request.Url.ToString() (according to MSDN)

Solution 8 - C#

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.

Solution 9 - C#

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;
}

Solution 10 - C#

Try the following -

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRedWolvesView Question on Stackoverflow
Solution 1 - C#MohsenView Answer on Stackoverflow
Solution 2 - C#travisView Answer on Stackoverflow
Solution 3 - C#DevelopingChrisView Answer on Stackoverflow
Solution 4 - C#Serj SaganView Answer on Stackoverflow
Solution 5 - C#Christian HagelidView Answer on Stackoverflow
Solution 6 - C#FlySwatView Answer on Stackoverflow
Solution 7 - C#ArtemView Answer on Stackoverflow
Solution 8 - C#RedWolvesView Answer on Stackoverflow
Solution 9 - C#IonBView Answer on Stackoverflow
Solution 10 - C#Abhishek KanrarView Answer on Stackoverflow