Cómo obtengo la URL completa de la página en la que estoy en C #

Necesito poder acceder a la URL completa de la página en la que estoy desde un control de usuario. ¿Es solo cuestión de concatenar un grupo de variables de solicitud juntas? ¿De ser asi, cuales? ¿O hay una manera más sencilla?

Usualmente uso Request.Url.ToString() para obtener la url completa (incluida la cadena de consulta), no se requiere concatenación.

Aquí hay una lista a la que normalmente me refiero para este tipo de información:

 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 

¡Espero que esto te resulte útil!

 Request.Url.AbsoluteUri 

Esta propiedad hace todo lo que necesita, todo en una llamada sucinta.

Request.RawUrl

si necesita la URL completa como todo, desde http hasta la cadena de consulta, deberá concatenar las siguientes variables

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

Gracias chicos, utilicé una combinación de sus respuestas @Christian y @Jonathan para mi necesidad específica.

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

No necesito preocuparme por http seguro, necesito la variable de nombre de servidor y RawUrl maneja la ruta desde el nombre de dominio e incluye la cadena de consulta, si está presente.

Es mejor utilizar Request.Url.OriginalString que Request.Url.ToString() (según MSDN )

Para ASP.NET Core necesitarás deletrearlo:

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

O puede agregar una statement de uso a su vista:

 @using Microsoft.AspNetCore.Http.Extensions 

entonces

 @Context.Request.GetDisplayUrl() 

El _ViewImports.cshtml podría ser un mejor lugar para ese @using

Si necesita el número de puerto también, puede usar

 Request.Url.Authority 

Ejemplo:

 string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString(); if (Request.ServerVariables["HTTPS"] == "on") { url = "https://" + url; } else { url = "http://" + url; }