Question

Existe-t-il un moyen simple dans .NET d'obtenir rapidement le protocole, l'hôte et le port actuels ?Par exemple, si je suis sur l'URL suivante :

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 que 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 URL.

Aucune suggestion?

Était-ce utile?

La solution

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;

Autres conseils

Même si @Rick a la réponse acceptée à cette question, il existe en fait un moyen plus court de procéder, en utilisant le mal nommé Uri.GetLeftPart() méthode.

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

Il y a un piège à GetLeftPart(), cependant.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, ce sera http://www.mywebsite.com.

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

Eh bien, si vous le faites dans asp.net ou si vous avez accès à httpcontext.current.request, je dirais que ce sont des moyens plus faciles 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 ça aide.:)

Une manière plus structurée d'y parvenir consiste à utiliser UriBuilder.Cela évite la manipulation directe des chaînes.

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

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

Échantillon:

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

J'espère que cela t'aides.

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

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

L'énumération UriComponents vous permet de spécifier le(s) composant(s) de l'URI que vous souhaitez inclure.

Très similaire à la réponse de Holger.Si vous avez besoin de récupérer l'URL, vous pouvez 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 Classe d'Uri fournit toute une gamme de méthodes, dont beaucoup que je n'ai pas répertoriées.

Dans mon cas, j'avais besoin de saisir LocalHost avec le Port Number, donc voici ce que j'ai fait :

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

Qui a réussi à saisir : http://localhost:12345

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top