2016-07-18 20 views
31

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?

+2

Podoba Ci się to? http://stackoverflow.com/questions/28120222/get-raw-url-from-microsoft-aspnet-http-httprequest – DavidG

+3

@DavidG Wygląda na to, że możesz teraz użyć UriHelper.GetDisplayUrl (Re quest) –

Odpowiedz

38

Musisz pobrać host i ścieżkę osobno.

@[email protected] 
+1

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

+0

Co to jest "@" między dwoma strunami? czy mógłbyś to wyjaśnić? –

+2

@MohammedNoureldin: to składnia widoku brzytwy. –

57

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}") 
+0

Jak uzyskać fragment, na przykład http://test.com/abc#123, w jaki sposób uzyskać fragment # 123 z żądania? –

+0

@fanray Nie możesz. Przeglądarki nie wysyłają fragmentów URI na serwer. – tmg

7

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.

+0

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

5
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); 
} 
18

Można użyć metody rozszerzenie z Request:

Request.GetDisplayUrl() 
+7

Działa to, jeśli dodasz '@using Microsoft.AspNetCore.Http.Extensions', a następnie' @ Context.Request.GetDisplayUrl() ' –

+0

nadal będzie - Żądanie nie istnieje w bieżącym kontekście – SeanKPS

2

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).

Powiązane problemy