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?
asp.net-core
asp.net-core-mvc
asp.net-core-1.0
oneNiceFriend
fuente
fuente
Respuestas:
Debe obtener el host y la ruta por separado.
fuente
@
entre las dos cadenas? ¿podrías explicarlo?@HttpContext
lugar de@Context
. Para vistas parciales@Context
funciona. ¿Olvidé un uso?Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflow.com/questions/434604/…Necesita esquema, host, ruta y queryString
o usando la nueva función de C # 6 "Interpolación de cadenas"
fuente
Puede utilizar el método de extensión de
Request
:fuente
@using Microsoft.AspNetCore.Http.Extensions
entonces@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
Basado en esto, creo que la solución de @ tmg es la mejor (quizás envuelta en su propio método de extensión).Aparentemente, esto siempre fue posible en .net core 1.0 con
Microsoft.AspNetCore.Http.Extensions
, que agrega extensiónHttpRequest
para obtener la URL completa; GetEncodedUrl .por ejemplo, desde la vista de la navaja:
Desde 2.0, también tiene una ruta relativa y consulta GetEncodedPathAndQuery .
fuente
Use la propiedad AbsoluteUri de Uri, con .Net core debe construir el Uri a partir de una solicitud como esta,
por ejemplo, si la URL de la solicitud es ' http://www.contoso.com/catalog/shownew.htm?date=today ', esto devolverá la misma URL.
fuente
Puede considerar utilizar este método de extensión (del
Microsoft.AspNetCore.Http.Extensions
espacio de nombres:Para algunos de mis proyectos prefiero una solución más flexible. Hay dos métodos de extensión.
1) El primer método crea un
Uri
objeto a partir de los datos de solicitud entrantes (con algunas variantes a través de parámetros opcionales). 2) El segundo método recibe elUri
objeto y lo devuelvestring
en el siguiente formato (sin barra diagonal al final): Scheme_Host_PortUso:
fuente
fuente
httpContext
? Eso no va a funcionar conMicrosoft.AspNetCore.Http.HttpContext.Request
Si también está buscando obtener el número de puerto de la solicitud, deberá acceder a él a través del
Request.Host
propiedad de AspNet Core.La
Request.Host
propiedad no es simplemente una cadena, sino un objeto que contiene tanto el dominio de host como el número de puerto. Si el número de puerto está específicamente escrito a cabo en la URL (es decir"https://example.com:8080/path/to/resource"
), a continuación, llamarRequest.Host
le dará el dominio de host y el número de puerto de esta 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
oRequest.Host.Port
).fuente
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 mi caso, intente esto:
Y deberá agregar
@using Microsoft.AspNetCore.Http.Extensions
la vista para que el método GetEncodedPathAndQuery () esté disponible.fuente
Existe una forma limpia de obtener la URL actual de una página de Razor o una clase de PageModel. Es decir:
Tenga en cuenta que me refiero a las "ASP.NET Core Razor Pages", no al MVC.
Utilizo este método cuando quiero imprimir la metaetiqueta URL canónica en las páginas de la maquinilla de afeitar ASP.NET Core. Pero hay una trampa. Le dará la URL que se supone que es la URL correcta para esa página. Dejame explicar.
Digamos, de acuerdo con la ruta que definió para una página, su URL debería verse como
Digamos que ha definido una ruta "Id" para su página. Entonces, Url.PageLink () le dará exactamente esa URL. Si el usuario agrega algo adicional en esa URL, diga:
Entonces, no obtendrá ese "somethingElse" de este método. Y es por eso que es exactamente bueno para imprimir metaetiquetas URL canónicas en la página HTML.
fuente