2016-07-18 365 views
31

Nelle versioni precedenti di asp.net, potremmo usareCome arrivare URL corrente in vista del core asp.net 1.0

@Request.Url.AbsoluteUri 

Ma sembra che è cambiato. Come possiamo farlo in asp.net core 1.0?

+2

Ti piace questo? http://stackoverflow.com/questions/28120222/get-raw-url-from-microsoft-aspnet-http-httprequest – DavidG

+3

@DavidG Sembra che ora puoi utilizzare UriHelper.GetDisplayUrl (Ricerca) –

risposta

38

È necessario ottenere l'host e il percorso separatamente.

@[email protected] 
+1

Questo non verrà segnalato l'url corretto se l'app si trova in una directory virtuale. Dovrai inserire il prefisso ** Request.Path ** con il valore ** Request.PathBase ** se ce n'è uno. Questo vale per quasi tutte le altre risposte a questa domanda. – padigan

+0

Che cosa è questo '@' tra le due stringhe? potresti spiegarlo? –

+2

@ MahammedNoureldin: questa è la sintassi della vista del rasoio. –

57

È necessario schema, host, il percorso e queryString

@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString) 

o utilizzando il nuovo C# 6 funzione "String interpolazione"

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}") 
+0

Come si ottiene il frammento, ad esempio http://test.com/abc#123, come si ottiene il frammento # 123 dalla richiesta? –

+0

@fanray Non puoi. I browser non inviano frammenti di URI al server – tmg

7

Utilizzare il absoluteURI proprietà della Uri , con .Net core devi costruire l'Uri da una richiesta come questa,

var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}"); 

var url = location.AbsoluteUri; 

ad es. se l'url della richiesta è 'http://www.contoso.com/catalog/shownew.htm?date=today', verrà restituito lo stesso URL.

+0

Cose come questa mi fanno pensare. Net Core è un passo indietro in qualche modo. È meglio di Request.Url in Asp.Net in un modo che non riesco a immaginare? – 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

È possibile utilizzare il metodo di estensione di Request:

Request.GetDisplayUrl() 
+7

Funziona se si aggiunge '@utilizzando Microsoft.AspNetCore.Http.Extensions', quindi' @ Context.Request.GetDisplayUrl() ' –

+0

si ottiene ancora - La richiesta non esiste nel contesto corrente – SeanKPS

2

Se stai cercando di ottenere anche il numero di porta fuori della richiesta è necessario accedervi tramite la proprietà Request.Host per AspNet Core.

La proprietà Request.Host non è semplicemente una stringa ma, al contrario, un oggetto che contiene sia il dominio host sia il numero di porta. Se il numero di porta è nello specifico nell'URL (ad esempio "https://example.com:8080/path/to/resource"), quindi chiamando Request.Host si otterrà il dominio host e il numero di porta in questo modo: "example.com:8080".

Se si desidera solo il valore per il dominio host o solo il valore per il numero di porta, è possibile accedere a tali proprietà singolarmente (ad esempio Request.Host.Host o Request.Host.Port).