2008-08-22 7 views
181

est-il un moyen simple .NET pour obtenir rapidement le protocole actuel, hôte et le port? Par exemple, si je suis sur l'URL suivante:.NET - Get protocole, l'hôte et le port

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

Je dois retourner:

http://www.mywebsite.com:80

Je sais que je peux utiliser Request.Url.AbsoluteUri pour obtenir l'URL complète, et je sais Je peux utiliser Request.Url.Authority pour obtenir l'hôte et le port, mais je ne suis pas sûr de la meilleure façon d'obtenir le protocole sans analyser la chaîne d'URL.

Des suggestions?

+0

Request.AbsoluteURI –

+1

Voir ma réponse à une simlar question ici - http://stackoverflow.com/a/1534478/98740 – WDuffy

Répondre

138

Le code suivant (C#) devrait faire l'affaire

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

Ou chaîne demandée = uri.Scheme + Uri.SchemeDelimiter + uri.Authority; – tranmq

+11

Ceci est sans doute la mauvaise réponse car il va insérer un ":" même s'il n'y a pas de port. Utilisez 'Uri.GetLeftPart' comme @dthrasher le signale – gman

20

Request.Url vous retourner le Uri de la demande. Une fois que vous avez cela, vous pouvez récupérer à peu près tout ce que vous voulez. Pour obtenir le protocole, appelez la propriété Scheme.

Exemple:

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

Hope this helps.

339

Même si @Rick a la réponse acceptée à cette question, il y a en fait une façon de faire plus court, en utilisant la méthode Uri.GetLeftPart() mal nommé.

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

Cependant, il y a une capture à GetLeftPart(). Si le port est le port par défaut du schéma, il le supprimera. Puisque le port 80 est le port par défaut pour http, la sortie de GetLeftPart() dans mon exemple ci-dessus sera http://www.mywebsite.com.

Si le numéro de port avait été autre chose que 80, il serait inclus dans le résultat.

+10

C'est le meilleur exemple à mon avis. Cela fonctionne pour localhost: port et live instances. –

+0

D'accord +1 parce que cela fonctionne hors localhost: port –

+8

GetLeftPart - vraiment, OMG nice nommage. –

46

Eh bien, si vous faites cela en Asp.Net ou avoir accès à HttpContext.Current.Request je dirais que ce sont des moyens plus simples et plus généraux de les obtenir:

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 

J'espère que cette aide . :)

+1

Je préfère cette méthode, je peux obtenir juste le peice que je veux et ne pas avoir à s'inquiéter de savoir si la chaîne est suffisamment formée pour obtenir le port. +1 – Jrud

+0

Plus de détails sur ces propriétés: http://blog.jonschneider.com/2014/10/systemuri-net-framework-45-visual-guide.html –

23

Une façon plus structurée pour y arriver est d'utiliser UriBuilder. Cela évite la manipulation directe des chaînes.

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

encore plus court chemin, peut nécessiter plus récent ASP.Net:

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

Le UriComponents ENUM vous permet de spécifier quel composant (s) de l'URI que vous souhaitez inclure.

+1

Génial, car il fonctionne en PCL (.GetLeftPart() n'est pas disponible là-bas) – Sascha

7

Très similaire à la réponse de Holger. Si vous avez besoin de saisir l'URL peut faire quelque chose comme:

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 

Le Uri class fournit toute une gamme de méthodes, beaucoup que je ne l'ai pas énumérés.

Dans mon exemple, je devais saisir LocalHost avec le Port Number, donc ce que je l'ai fait:

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

qui a saisi avec succès: http://localhost:12345

Questions connexes