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?

È stato utile?

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

Request.Url ti restituirà il file Uri della richiesta.Una volta ottenuto ciò, puoi recuperare praticamente tutto ciò che desideri.Per ottenere il protocollo, chiamare il schema proprietà.

Campione:

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

Spero che questo ti aiuti.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top