177

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?

travis
  • 35,751
  • 21
  • 71
  • 94
RedWolves
  • 10,379
  • 12
  • 49
  • 68
  • 6
    To anyone in a loadbalanced webfarm.. beware the port number that appears when using System.Url: http://stackoverflow.com/questions/7674850/get-original-url-without-non-standard-port-c – felickz Nov 09 '12 at 20:25

10 Answers10

355

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!

Mohsen
  • 3,569
  • 2
  • 12
  • 4
160

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

travis
  • 35,751
  • 21
  • 71
  • 94
77
Request.Url.AbsoluteUri

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

beercohol
  • 2,577
  • 13
  • 26
DevelopingChris
  • 39,797
  • 30
  • 87
  • 118
30

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

Serj Sagan
  • 28,927
  • 17
  • 154
  • 183
9

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")
Christian Hagelid
  • 8,275
  • 4
  • 40
  • 63
8

Request.RawUrl

FlySwat
  • 172,459
  • 74
  • 246
  • 311
  • 7
    this doesn't not return the full url. If the full url is http://www.blah.com/1.1/home/main?a=1 Request.RawUrl will return 1.1/hom/main?a=1 – jnoreiga Aug 02 '12 at 18:06
7

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

Irshad
  • 3,071
  • 5
  • 30
  • 51
Artem
  • 71
  • 2
  • 2
  • It's only better if you really require the original string. – Dirk Mar 13 '14 at 09:23
  • @DirkThe from link to MSDN above: "String returned by the ToString method may contain control characters, which can corrupt the state of a console application. You can use the GetComponents method with the UriFormat.SafeUnescaped format to remove control characters from the returned string." – Artem Mar 13 '14 at 10:44
  • Exactly, and that has nothing to do with `OriginalString`. – Dirk Mar 13 '14 at 10:45
5

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.

RedWolves
  • 10,379
  • 12
  • 49
  • 68
  • 2
    You should also know that RawUrl, unlike Request.Url, represents the original, unmapped request url if url mapping is being used. – harpo Sep 09 '08 at 05:44
  • SERVER_NAME often does not return the "real" URL used by the client. HTTP_HOST is probably the better form if going to dig in directly.. also misses out simple HTTP-to-another-port. – user2864740 Jul 13 '17 at 04:39
1

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;
}
IonB
  • 11
  • 6
1

Try the following -

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
Tushar Walzade
  • 3,737
  • 4
  • 33
  • 56
Abhishek Kanrar
  • 418
  • 4
  • 6