Domanda .NET - Ottieni protocollo, host e porta


C'è un modo semplice in .NET per ottenere rapidamente il protocollo, l'host e la porta correnti? Ad esempio, se sono sul seguente URL:

http://www.mywebsite.com:80/pages/page1.aspx

Ho bisogno di tornare:

http://www.mywebsite.com:80

So che posso usare Request.Url.AbsoluteUri per ottenere l'URL completo, e so che posso usare Request.Url.Authority per ottenere l'host e la porta, ma non sono sicuro del modo migliore per ottenere il protocollo senza analizzare la stringa dell'URL.

Eventuali suggerimenti?


193
2017-08-22 02:18


origine


risposte:


Il seguente codice (C #) dovrebbe fare il trucco

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;

141
2017-08-22 13:35



Anche se @Rick ha la risposta accettata per questa domanda, c'è in realtà un modo più breve per farlo, usando il nome poco conosciuto Uri.GetLeftPart() metodo.

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);

C'è una presa a GetLeftPart(), però. Se la porta è la porta predefinita per lo schema, verrà eliminata. Poiché la porta 80 è la porta predefinita per http, l'output di GetLeftPart() nel mio esempio sopra sarà http://www.mywebsite.com.

Se il numero di porta fosse stato qualcosa di diverso da 80, sarebbe incluso nel risultato.


358
2018-02-23 15:45



Bene se lo stai facendo in Asp.Net o hai accesso a HttpContext.Current.Request Direi che questi sono modi più semplici e più generali per ottenerli:

var scheme = Request.Url.Scheme; // will get http, https, etc.
var host = Request.Url.Host; // will get www.mywebsite.com
var port = Request.Url.Port; // will get the port
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx

Spero che aiuti. :)


49
2017-11-16 14:42



Un modo più strutturato per ottenere questo è usare UriBuilder. Questo evita la manipolazione diretta delle stringhe.

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);

25
2018-03-08 21:56



Request.Url ti restituirà il Uri della richiesta. Una volta che hai, puoi recuperare praticamente tutto ciò che vuoi. Per ottenere il protocollo, chiama il schema proprietà.

Campione:

Uri url = Request.Url;
string protocol = url.Scheme;

Spero che questo ti aiuti.


20
2017-08-22 02:48



Anche in modo più breve, potrebbe richiedere ASP.Net più recente:

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)

L'enun UriComponents ti consente di specificare quali componenti dell'URI vuoi includere.


14
2017-09-16 18:07



Molto simile alla risposta di Holger. Se hai bisogno di afferrare l'URL puoi fare qualcosa del tipo:

Uri uri = Context.Request.Url;         
var scheme = uri.Scheme // returns http, https
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https://
var host = uri.Host; // return www.mywebsite.com
var port = uri.Port; // returns port number

Il Classe Uri fornisce un'intera gamma di metodi, molti dei quali non ho elencato.

Nel mio caso, avevo bisogno di afferrare LocalHost insieme con il Port Number, quindi questo è quello che ho fatto:

var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

Che ha afferrato con successo: http://localhost:12345


7
2017-11-14 22:40