.NET: ottieni protocollo, host e porta
Domanda
Esiste un modo semplice in .NET per ottenere rapidamente il protocollo, l'host e la porta correnti?Ad esempio, se mi trovo al seguente URL:
http://www.mywebsite.com:80/pages/page1.aspx
Devo restituire:
http://www.mywebsite.com:80
So che posso usare Request.Url.AbsoluteUri
per ottenere l'URL completo e so che posso usarlo 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?
Soluzione
Il seguente codice (C#) dovrebbe risolvere il problema
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Altri suggerimenti
Anche se @Rick ha la risposta accettata per questa domanda, in realtà c'è un modo più breve per farlo, usando il nome improprio Uri.GetLeftPart()
metodo.
Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);
C'è un problema GetLeftPart()
, Tuttavia.Se la porta è la porta predefinita per lo schema, la eliminerà.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 diverso da 80, verrebbe incluso nel risultato.
Bene, se lo stai facendo in asp.net o hai accesso a httpcontext.current.request direi che sono modi più facili 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.:)
Un modo più strutturato per ottenere ciò è utilizzare UriBuilder.Ciò evita la manipolazione diretta delle stringhe.
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
Un modo ancora più breve, potrebbe richiedere ASP.Net più recente:
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
L'enumerazione UriComponents ti consente di specificare quali componenti dell'URI desideri includere.
Molto simile alla risposta di Holger.Se hai bisogno di prendere 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 tutta una serie di metodi, molti dei quali non ho elencato.
Nel mio caso, dovevo 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 catturato con successo: http://localhost:12345