49 votes

Asp.Net - Chemin absolu d'une URL

Pour simplifier le partage de fichiers entre une application web et une autre application sur un serveur différent, j'utilise une balise href de base dans ma page principale. Comme beaucoup de gens l'ont découvert, cela casse les chemins des formulaires web. J'ai une classe Form Adaptor qui fonctionne mais je ne sais pas comment obtenir le chemin absolu de l'url. Actuellement, mon programme est codé en dur pour utiliser quelque chose qui ressemble à :

HttpContext Context = HttpContext.Current;
value = "http://localhost" + Context.Request.RawUrl;

Il convient de noter que je suis actuellement en train de tester sur mon serveur IIS local, il y a donc une tendance étrange pour beaucoup de choses que j'ai essayé d'utiliser afin que le chemin absolu ne comprennent pas le nom de domaine (mon IIS local n'est pas visible de l'extérieur). Ce qui signifie que ce n'est pas un chemin absolu et donc que le href de base le détruira.

Existe-t-il un bon moyen de gérer cela de manière à ce que cela fonctionne localement sans codage en dur, mais aussi correctement lors du téléchargement vers un serveur ? Je préfère éviter tout ce qui implique de faire quelque chose de différent sur la copie côté serveur.

Oui, je me rends compte que je pourrais utiliser des fichiers web.config séparés, localement et sur le serveur, pour obtenir ces informations, mais c'est laid et contraire au principe DRY.

0 votes

Je ne suis pas sûr mais, avez-vous essayé Request.Url.Host ?

112voto

John Rasch Points 28874

Je l'ai déjà utilisé dans le passé :

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath"
HttpContext.Current.Request.Url.Scheme 
    + "://"
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath;

4voto

Chris Foster Points 792

Vieux poste mais voici une autre méthode un peu moins verbeuse

var baseUri = new Uri(HttpContext.Current.Request.Url, "/");

0voto

Waqi Points 13

J'ai utilisé ce qui suit et cela a fonctionné pour moi, tant pour le client que pour le serveur.

string surl = string.Format("{0}://{1}",
    HttpContext.Current.Request.Url.Scheme,
    HttpContext.Current.Request.Url.Authority);

0voto

Utilisation de l'interpolation de chaînes de caractères :

string redirectUri = $"{this.Request.Url.Scheme}://{this.Request.Url.Authority}{this.Request.ApplicationPath}account/signedout";

Remplacez 'this' par 'HttpContext' ou 'HttpContext.Current' en fonction du contexte.

-9voto

user799577 Points 21

Code :

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"];

7 votes

C'est une très mauvaise chose de mettre le mot de passe dans l'URL. Ne le faites pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X