w poprzednich wersjach programu ASP.NET, moglibyśmy użyćJak uzyskać aktualne url w widoku w rdzeniu asp.net 1.0
@Request.Url.AbsoluteUri
Ale wydaje się to zmienić. Jak możemy to zrobić w rdzeniu 1.0 asp.net?
w poprzednich wersjach programu ASP.NET, moglibyśmy użyćJak uzyskać aktualne url w widoku w rdzeniu asp.net 1.0
@Request.Url.AbsoluteUri
Ale wydaje się to zmienić. Jak możemy to zrobić w rdzeniu 1.0 asp.net?
Musisz pobrać host i ścieżkę osobno.
@[email protected]
To nie będzie raportować poprawny adres URL, jeśli aplikacja znajduje się w katalogu wirtualnym. Będziesz musiał poprzedzić wartość ** Request.Path ** wartością ** Request.PathBase **, jeśli taka istnieje. Dotyczy to również prawie wszystkich innych odpowiedzi na to pytanie. – padigan
Co to jest "@" między dwoma strunami? czy mógłbyś to wyjaśnić? –
@MohammedNoureldin: to składnia widoku brzytwy. –
Trzeba schemat, host, ścieżkę i kwerendy
@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)
lub przy użyciu nowych C# 6 fabularny "interpolacji string"
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Jak uzyskać fragment, na przykład http://test.com/abc#123, w jaki sposób uzyskać fragment # 123 z żądania? –
@fanray Nie możesz. Przeglądarki nie wysyłają fragmentów URI na serwer. – tmg
Użyj AbsoluteUri własność Uri , z rdzeniem .Net musisz zbudować Uri z takiego żądania,
var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
var url = location.AbsoluteUri;
np. jeśli adres URL żądania to "http://www.contoso.com/catalog/shownew.htm?date=today", zwrócony zostanie ten sam URL.
Takie rzeczy sprawiają, że myślę, że .Net Core to krok w tył w pewien sposób. Czy to jest lepsze niż Request.Url w Asp.Net w jakiś sposób, że nie jestem w stanie sobie wyobrazić? – Soenhay
public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString))
{
var rq = httpContext.Request;
return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment);
}
Można użyć metody rozszerzenie z Request
:
Request.GetDisplayUrl()
Działa to, jeśli dodasz '@using Microsoft.AspNetCore.Http.Extensions', a następnie' @ Context.Request.GetDisplayUrl() ' –
nadal będzie - Żądanie nie istnieje w bieżącym kontekście – SeanKPS
Jeśli szukasz również uzyskać numer portowy z wniosku trzeba do niego dostęp za pośrednictwem właściwość Request.Host
dla AspNet Core.
Właściwość Request.Host
nie jest po prostu ciągiem znaków, lecz obiektem, który zawiera zarówno domenę hosta , jak i numer portu. Jeśli numer portu jest konkretnie wypisany w URL (tj. "https://example.com:8080/path/to/resource"
), to wywołanie Request.Host
da ci domenę hosta i numer portu, tak jak: "example.com:8080"
.
Jeśli chcesz tylko wartość domeny hosta lub chcesz tylko wartość numeru portu, możesz uzyskać dostęp do tych właściwości indywidualnie (tj. Request.Host.Host
lub Request.Host.Port
).
Podoba Ci się to? http://stackoverflow.com/questions/28120222/get-raw-url-from-microsoft-aspnet-http-httprequest – DavidG
@DavidG Wygląda na to, że możesz teraz użyć UriHelper.GetDisplayUrl (Re quest) –