asp.net-core asp.net-core-mvc asp.net-core-1.0

Cómo obtener la URL actual a la vista en asp.net core 1.0



asp.net-core asp.net-core-mvc (9)

En versiones anteriores de asp.net, podríamos usar

@Request.Url.AbsoluteUri

Pero parece que ha cambiado. ¿Cómo podemos hacer eso en asp.net core 1.0?


Aparentemente, esto siempre fue posible en .net core 1.0 con Microsoft.AspNetCore.Http.Extensions , que agrega extensión a HttpRequest para obtener la URL completa; GetEncodedUrl .

Por ejemplo, desde la vista de la maquinilla de afeitar:

@using Microsoft.AspNetCore.Http.Extensions ... <a href="@Context.Request.GetEncodedUrl()">Link to myself</a>

Desde 2.0, también tiene una ruta relativa y consulta GetEncodedPathAndQuery .


La respuesta aceptada me ayudó, al igual que el comentario de @padigan, pero si desea incluir los parámetros de la cadena de consulta como fue el caso para mí, intente esto:

@[email protected]()

Y deberá agregar @using Microsoft.AspNetCore.Http.Extensions en la vista para que el método GetEncodedPathAndQuery () esté disponible.


Necesita esquema, host, ruta y queryString

@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)

o utilizando la nueva función C # 6 "Interpolación de cadenas"

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


Puede considerar usar este método de extensión (del espacio de nombres Microsoft.AspNetCore.Http.Extensions :

@Context.Request.GetDisplayUrl()

Para algunos de mis proyectos, prefiero una solución más flexible. Hay dos métodos de extensiones.

1) El primer método crea un objeto Uri partir de los datos de solicitud entrantes (con algunas variantes a través de parámetros opcionales). 2) El segundo método recibe el objeto Uri y devuelve la string en el siguiente formato (sin barra inclinada): Scheme_Host_Port

public static Uri GetUri(this HttpRequest request, bool addPath = true, bool addQuery = true) { var uriBuilder = new UriBuilder { Scheme = request.Scheme, Host = request.Host.Host, Port = request.Host.Port.GetValueOrDefault(80), Path = addPath ? request.Path.ToString() : default(string), Query = addQuery ? request.QueryString.ToString() : default(string) }; return uriBuilder.Uri; } public static string HostWithNoSlash(this Uri uri) { return uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped); }

Uso:

//before >> https://localhost:44304/information/about?param1=a&param2=b Request.GetUri(addQuery: false); //after >> https://localhost:44304/information/about //before >> https://localhost:44304/information/about?param1=a&param2=b new Uri("https://localhost:44304/information/about?param1=a&param2=b").GetHostWithNoSlash(); //after >> https://localhost:44304


Puede usar el método de extensión de Request :

Request.GetDisplayUrl()


Si también desea obtener el número de puerto de la solicitud, deberá acceder a él a través de la propiedad Request.Host para AspNet Core.

La propiedad Request.Host no es simplemente una cadena, sino un objeto que contiene tanto el dominio del host como el número de puerto. Si el número de puerto está escrito específicamente en la URL (es decir, "https://example.com:8080/path/to/resource" ), llamar a Request.Host le dará el dominio del host y el número de puerto de la siguiente manera: "example.com:8080" .

Si solo desea el valor para el dominio de host o solo desea el valor para el número de puerto, puede acceder a esas propiedades individualmente (es decir, Request.Host.Host o Request.Host.Port ).



Use la propiedad AbsoluteUri del Uri, con .Net core tiene que construir el Uri a partir de una solicitud como esta,

var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}"); var url = location.AbsoluteUri;

por ejemplo, si la url de solicitud es '' http://www.contoso.com/catalog/shownew.htm?date=today '', devolverá la misma url.


public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString)) { var rq = httpContext.Request; return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment); }