HttpRequest
Klasa w Asp.Net 5 (vNext) zawiera (między innymi) analizowanych Szczegółowe informacje na temat URL żądania, takie jak Scheme
, Host
, Path
itp
Nie zauważyłem jeszcze nigdzie, co ujawnia pierwotny adres URL żądania - tylko te przeanalizowane wartości. (W poprzednich wersjach było Request.Uri
)
Czy mogę odzyskać surowy adres URL bez konieczności składania go razem z komponentów dostępnych w HttpRequest?
request
uri
asp.net-core
Jon Egerton
źródło
źródło
Odpowiedzi:
Wygląda na to, że nie możesz uzyskać do niego bezpośredniego dostępu, ale możesz go zbudować za pomocą frameworka:
Możesz również użyć powyższego jako metody rozszerzenia.
To zwraca
string
raczej niż aUri
, ale powinno służyć temu celowi! (Wydaje się, że to również spełnia rolęUriBuilder
.)Dzięki @mswietlicki za wskazanie, że został on po prostu refaktoryzowany, a nie brakujący! A także do @CF, aby wskazać zmianę przestrzeni nazw w mojej odpowiedzi!
źródło
GetEncodedUri
lubGetDisplayUri
, w zależności od przypadku użycia.Dodaj pakiet Nuget / używając:
(W ASP.NET Core RC1 było to w Microsoft.AspNet.Http.Extensions)
wtedy możesz uzyskać pełny adres URL żądania http, wykonując:
lub
w zależności od celów.
źródło
using
dyrektywę w swoim pliku, tak jak opisano w odpowiedzi, ponieważ nie są to „normalne” metody, ale raczej metody rozszerzające.Jeśli naprawdę chcesz mieć rzeczywisty, surowy adres URL , możesz użyć następującej metody rozszerzenia:
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); } }
Ta metoda wykorzystuje
RawTarget
żądanie, które nie jest wyświetlane w samymHttpRequest
obiekcie. Ta właściwość została dodana w wersji 1.0.0 programu ASP.NET Core. Upewnij się, że używasz tej lub nowszej wersji.UWAGA! Ta właściwość ujawnia nieprzetworzony adres URL, więc nie został on zdekodowany, zgodnie z dokumentacją:
źródło
RawTarget
to nie działa dla mnie ( nie jest zdefiniowaneIHttpRequestFeature
). Czy możesz wymyślić alternatywę?RawTarget
został dodany w wersji 1.0, jeszcze w maju . Czy na pewno używasz najnowszej wersji?W maszynce do golenia .NET Core:
Możesz także użyć zamiast drugiej linii:
źródło
Inne rozwiązania nie pasowały do moich potrzeb, ponieważ chciałem bezpośrednio
URI
obiekt i myślę, że lepiej jest unikać łączenia ciągów (również) w tym przypadku, więc stworzyłem te metody rozszerzające niż użycie aUriBuilder
i działa również z adresami URL takimi jakhttp://localhost:2050
:źródło
(80)
powinno być(-1)
. Jeśli masz schemat https z pominięciem portu w nagłówku "Host", wygeneruje to zły Uri (np.https://myweb:80/
Z(-1)
nim będziehttps://myweb
).Następująca metoda rozszerzenia odtwarza logikę z wersji pre-beta5
UriHelper
:źródło
To rozszerzenie działa dla mnie:
using Microsoft.AspNetCore.Http;
źródło
W ASP.NET 5 beta5:
źródło