2008-09-02 14 views
128

Necesito poder acceder a la URL completa de la página en la que me encuentro 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?¿Cómo obtengo la dirección URL completa de la página en la que estoy? C#

+4

Para cualquier persona en una WebFarm in equilibrio de carga .. cuidado con el número de puerto que aparece cuando se utiliza System.Url: http://stackoverflow.com/questions/7674850/get -original-url-without-non-standard-port-c – felickz

Respuesta

133

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

+2

Si la URL contiene '#', no se incluirán todos los caracteres después de #. –

+5

@KrunalSisodiya No creo que nunca se envíe el hash de una URL al servidor, pero podría estar equivocado. – travis

+0

'Request.Url.ToString()' no incluye queryString. –

9

Request.RawUrl

+7

esto no devuelve la url completa. Si la URL completa es http://www.blah.com/1.1/home/main?a=1 Request.RawUrl devolverá 1.1/hom/main? A = 1 – jnoreiga

9

si necesita la URL completa, ya que todo el http a la cadena de consulta que necesitará para concatenar las siguientes variables

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

Esto no tiene en cuenta los puertos no estándar (es decir, sin utilizar el puerto 80 para http) – Spongeboy

+1

, podría utilizar Request.ServerVariables ("SERVER_PORT") para la detección de puertos. – armen

+1

Tenga en cuenta que esta respuesta utiliza la sintaxis de VB.Net. En C#, use Request.ServerVariables ["HTTPS"] por ejemplo. – jaycer

4

, gracias, he usado una combinación de ambos su responde @Christian y @Jonathan por mi necesidad específica.

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

No necesito que preocuparse de HTTP seguro, necesita la variable nombre del servidor y el RawUrl se encarga de la ruta del nombre de dominio e incluye la cadena de consulta si está presente.

+2

También debe saber que RawUrl, a diferencia de la Solicitud.Url, representa la url de solicitud original, no asignada, si se está utilizando la asignación url. – harpo

+0

SERVER_NAME a menudo no devuelve la URL "real" utilizada por el cliente. HTTP_HOST es probablemente la mejor forma si vas a cavar directamente ... también se pierde el simple HTTP-to-another-port. – user2864740

62
Request.Url.AbsoluteUri 

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

+6

+1. Esta es la mejor respuesta. Debería preferirse a Request.Url.ToString(). –

+0

* succint * ...... – Unbreakable

1

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

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

Aquí está una lista de lo que normalmente se refieren a 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 

¡Esperamos que le resulte útil!

+0

1) También hay Request.RawUrl; 2) Request.Url puede lanzar una excepción en 'rutas muy mal solicitadas'. – user2864740

+0

Respuesta muy útil, pero ¿no deberían los números de puerto ser consistentes para evitar confusiones (suponiendo que todos los ejemplos son para la misma solicitud? Por ejemplo, Autoridad y puerto implican puerto 80 pero AbsoluteUri contiene puerto 2000) –

+0

'Request.QueryString' devuelve' q = qvalue' solo – Marcel

5

Es mejor usar Request.Url.OriginalString de Request.Url.ToString() (según MSDN)

+0

Solo es mejor si realmente necesita la cadena original. – Dirk

+0

@DirkEl enlace de MSDN anterior: "La cadena devuelta por el método ToString puede contener caracteres de control, que pueden dañar el estado de una aplicación de consola. Puede usar el método GetComponents con el formato UriFormat.SafeUnescaped para eliminar los caracteres de control de la respuesta cuerda." – Eni

+0

Exactamente, y eso no tiene nada que ver con 'OriginalString'. – Dirk

1

Por ASP.NET Core que necesita para explicarla:

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

O puede agregar una declaración utilizando a la vista:

@using Microsoft.AspNetCore.Http.Extensions 

continuación

@Context.Request.GetDisplayUrl() 

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

Cuestiones relacionadas