A HttpRequest
classe em Asp.Net 5 (vNext) contém (entre outras coisas) detalhes analisados sobre o URL para o pedido, como Scheme
, Host
, Path
etc.
Ainda não localizei nenhum lugar que exponha o URL da solicitação original - apenas esses valores analisados. (Nas versões anteriores havia Request.Uri
)
Posso obter o URL bruto de volta sem precisar reuni-lo dos componentes disponíveis em HttpRequest?
request
uri
asp.net-core
Jon Egerton
fonte
fonte
Respostas:
Parece que você não pode acessá-lo diretamente, mas pode criá-lo usando a estrutura:
Você também pode usar o acima como um método de extensão.
Isso retorna um em
string
vez de umUri
, mas deve servir ao propósito! (Isso também parece servir ao papel doUriBuilder
também.)Obrigado a @mswietlicki por apontar que ele acabou de ser refatorado em vez de sumir! E também para @CF, para apontar a mudança de namespace em minha resposta!
fonte
GetEncodedUri
ouGetDisplayUri
, dependendo do seu caso de uso.Adicione o pacote Nuget / usando:
(No ASP.NET Core RC1, isso estava em Microsoft.AspNet.Http.Extensions)
então você pode obter o URL completo da solicitação http executando:
ou
dependendo dos objetivos.
fonte
using
diretiva em seu arquivo conforme descrito na resposta, pois esses não são métodos "normais", mas sim métodos de extensão.Se você realmente deseja o URL bruto real, pode usar o seguinte método de extensão:
public static class HttpRequestExtensions { public static Uri GetRawUrl(this HttpRequest request) { var httpContext = request.HttpContext; var requestFeature = httpContext.Features.Get<IHttpRequestFeature>(); return new Uri(requestFeature.RawTarget); } }
Este método utiliza o
RawTarget
da solicitação, que não aparece noHttpRequest
próprio objeto. Esta propriedade foi adicionada na versão 1.0.0 do ASP.NET Core. Certifique-se de que está executando essa ou uma versão mais recente.NOTA! Esta propriedade expõe o URL bruto , portanto, não foi decodificado, conforme observado pela documentação:
fonte
RawTarget
não está definido emIHttpRequestFeature
). Você pode pensar em uma alternativa?RawTarget
foi adicionado na versão 1.0, em maio . Tem certeza de que está executando a versão mais recente?No razor do .NET Core:
Você também pode usar em vez da segunda linha:
fonte
As outras soluções não atenderam bem às minhas necessidades porque eu queria diretamente um
URI
objeto e acho melhor evitar a concatenação de strings (também) neste caso, então criei esses métodos de extensão do que usar umUriBuilder
e também funciona com urls comohttp://localhost:2050
:fonte
(80)
deveria ser(-1)
. Quando você tem o esquema https com a porta omitida no cabeçalho "Host", isso irá gerar um Uri errado (por exemplohttps://myweb:80/
, com(-1)
ele seráhttps://myweb
).O seguinte método de extensão reproduz a lógica do pré-beta5
UriHelper
:fonte
Esta extensão funciona para mim:
usando Microsoft.AspNetCore.Http;
fonte
No ASP.NET 5 beta5:
fonte