Nas versões anteriores do asp.net, podíamos usar
@Request.Url.AbsoluteUri
Mas parece que mudou. Como podemos fazer isso no asp.net core 1.0?
asp.net-core
asp.net-core-mvc
asp.net-core-1.0
oneNiceFriend
fonte
fonte
Respostas:
Você deve obter o host e o caminho separadamente.
fonte
@
entre as duas cordas? você poderia explicar isso?@HttpContext
vez de@Context
. Para@Context
obras de vistas parciais . Eu esqueci de usar?Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflow.com/questions/434604/…Você precisa de esquema, host, caminho e queryString
ou usando o novo recurso C # 6 "interpolação de string"
fonte
Você pode usar o método de extensão de
Request
:fonte
@using Microsoft.AspNetCore.Http.Extensions
então@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
Baseado nisso, acho que a solução do @tmg é a melhor (talvez envolvida em seu próprio método de extensão).Isso aparentemente sempre foi possível em .net core 1.0 com
Microsoft.AspNetCore.Http.Extensions
, que adiciona a extensão aHttpRequest
para obter o URL completo; GetEncodedUrl .por exemplo, da visão de navalha:
Desde 2.0, também tem caminho relativo e consulta GetEncodedPathAndQuery .
fonte
Use a propriedade AbsoluteUri do Uri, com .Net core você tem que construir o Uri a partir de um pedido como este,
por exemplo, se o url do pedido for ' http://www.contoso.com/catalog/shownew.htm?date=today ', ele retornará o mesmo url.
fonte
Você pode considerar o uso deste método de extensão (do
Microsoft.AspNetCore.Http.Extensions
namespace:Para alguns meus projetos, prefiro uma solução mais flexível. Existem dois métodos de extensão.
1) O primeiro método cria
Uri
objeto a partir de dados de solicitação de entrada (com algumas variantes por meio de parâmetros opcionais). 2) O segundo método recebe oUri
objeto e retornastring
no seguinte formato (sem barra final): Scheme_Host_PortUso:
fonte
fonte
httpContext
? Isso não vai funcionar comMicrosoft.AspNetCore.Http.HttpContext.Request
Se você deseja obter o número da porta da solicitação, será necessário acessá-lo por meio do
Request.Host
propriedade do AspNet Core.A
Request.Host
propriedade não é simplesmente uma string, mas, em vez disso, um objeto que contém o domínio do host e o número da porta. Se o número da porta é especificamente escrito para fora na URL (ou seja"https://example.com:8080/path/to/resource"
), em seguida, chamarRequest.Host
lhe dará o domínio do host eo número da porta da seguinte forma:"example.com:8080"
.Se você quiser apenas o valor para o domínio do host ou apenas o valor para o número da porta, poderá acessar essas propriedades individualmente (
Request.Host.Host
ou seja, ouRequest.Host.Port
).fonte
A resposta aceita me ajudou, assim como o comentário de @padigan, mas se você quiser incluir os parâmetros de string de consulta como era o meu caso, tente isto:
E você precisará adicionar
@using Microsoft.AspNetCore.Http.Extensions
a visualização para que o método GetEncodedPathAndQuery () esteja disponível.fonte
Existe uma maneira limpa de obter o URL atual de uma página do Razor ou classe PageModel. Isso é:
Observe que eu quis dizer as "Páginas ASP.NET Core Razor", não o MVC.
Eu uso esse método quando desejo imprimir a metatag canônica de URL nas páginas do ASP.NET Core. Mas há um porém. Ele lhe dará a URL que deve ser a URL certa para aquela página. Deixe-me explicar.
Digamos que, de acordo com a rota que você definiu para uma página, seu URL deve ser semelhante a
Digamos que você definiu uma rota "Id" para sua página. Portanto, Url.PageLink () fornecerá exatamente esse URL. Se o usuário adicionar algo extra nesse URL, digamos,
Então, você não obterá aquele "somethingElse" com este método. E é por isso que ele é exatamente bom para imprimir metatags de URL canônicas na página HTML.
fonte