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:
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¶m2=b
Request.GetUri(addQuery: false);
//after >> https://localhost:44304/information/about
//before >> https://localhost:44304/information/about?param1=a¶m2=b
new Uri("https://localhost:44304/information/about?param1=a¶m2=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
).
Tienes que obtener el host y la ruta por separado.
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);
}