W poprzednich wersjach asp.net mogliśmy użyć
@Request.Url.AbsoluteUri
Ale wydaje się, że to się zmieniło. Jak możemy to zrobić w asp.net core 1.0?
asp.net-core
asp.net-core-mvc
asp.net-core-1.0
oneNiceFriend
źródło
źródło
Odpowiedzi:
Musisz osobno uzyskać hosta i ścieżkę.
źródło
@
między dwoma strunami? czy mógłbyś to wyjaśnić?@HttpContext
zamiast@Context
. W przypadku widoków częściowych@Context
działa. Czy zapomniałem o użyciu?Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflowPotrzebujesz schematu, hosta, ścieżki i zapytania
lub używając nowej funkcji C # 6 „Interpolacja ciągów”
źródło
Możesz użyć metody rozszerzenia
Request
:źródło
@using Microsoft.AspNetCore.Http.Extensions
wtedy@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
na tej podstawie myślę, że rozwiązanie @ tmg jest najlepsze (być może zapakowane w twoją własną metodę rozszerzenia).Najwyraźniej było to zawsze możliwe w .net core 1.0 z
Microsoft.AspNetCore.Http.Extensions
, który dodaje rozszerzenie,HttpRequest
aby uzyskać pełny adres URL; GetEncodedUrl .np. z widoku brzytwy:
Od wersji 2.0 mają również ścieżkę względną i zapytanie GetEncodedPathAndQuery .
źródło
Użyj właściwości AbsoluteUri Uri, z .Net core musisz zbudować Uri na podstawie takiego żądania,
np. jeśli adres URL żądania to „ http://www.contoso.com/catalog/shownew.htm?date=today ”, to zwróci ten sam adres URL.
źródło
Możesz rozważyć użycie tej metody rozszerzenia (z
Microsoft.AspNetCore.Http.Extensions
przestrzeni nazw:W przypadku niektórych projektów preferuję bardziej elastyczne rozwiązania. Istnieją dwie metody rozszerzeń.
1) Pierwsza metoda tworzy
Uri
obiekt z przychodzących danych żądania (z niektórymi wariantami poprzez opcjonalne parametry). 2) Druga metoda odbieraUri
obiekt i zwracastring
w następującym formacie (bez końcowego ukośnika): Scheme_Host_PortStosowanie:
źródło
źródło
httpContext
? To nie zadziałaMicrosoft.AspNetCore.Http.HttpContext.Request
Jeśli chcesz również uzyskać numer portu z żądania, musisz uzyskać do niego dostęp za pośrednictwem
Request.Host
właściwości dla AspNet Core.Request.Host
Nieruchomość nie jest po prostu ciąg, ale zamiast tego, obiekt, który posiada zarówno domenę hosta i numer portu. Jeśli numer portu jest specjalnie rozpisane w adresie URL (tj"https://example.com:8080/path/to/resource"
), a następnie wywołanieRequest.Host
daje domenę hosta i numer portu, jak tak:"example.com:8080"
.Jeśli potrzebujesz tylko wartości dla domeny hosta lub tylko numeru portu, możesz uzyskać dostęp do tych właściwości indywidualnie (tj.
Request.Host.Host
LubRequest.Host.Port
).źródło
Zaakceptowana odpowiedź pomogła mi, podobnie jak komentarz do niej z @padigan, ale jeśli chcesz dołączyć parametry ciągu zapytania, tak jak w moim przypadku, spróbuj tego:
@using Microsoft.AspNetCore.Http.Extensions
Aby metoda GetEncodedPathAndQuery () była dostępna, musisz dodać widok.źródło
Istnieje czysty sposób uzyskania bieżącego adresu URL ze strony Razor lub klasy PageModel. To jest:
Zwróć uwagę, że miałem na myśli „ASP.NET Core Razor Pages ”, a nie MVC.
Używam tej metody, gdy chcę wydrukować metatag kanonicznego adresu URL na stronach maszynki do golenia ASP.NET Core. Ale jest w tym haczyk. Otrzymasz adres URL, który powinien być właściwym adresem URL dla tej strony. Pozwól mi wyjaśnić.
Powiedzmy, że zdefiniowałeś trasę o nazwie „id” dla swojej strony i dlatego Twój adres URL powinien wyglądać tak
Url.PageLink () poda dokładnie ten adres URL, jak pokazano powyżej.
Jeśli użytkownik doda coś więcej do tego adresu URL, powiedzmy,
Wtedy nie uzyskasz tego „somethingElse” z tej metody. Właśnie dlatego jest dokładnie dobry do drukowania metatagu kanonicznego adresu URL na stronie HTML.
źródło