2009-02-19 76 views
47

Pour simplifier le partage de fichiers avec une autre application sur un serveur différent, j'utilise une balise href de base dans ma page maître. Comme beaucoup de personnes l'ont découvert, cela casse les chemins du Webform. J'ai une classe d'adaptateur de formulaire qui fonctionne, mais je ne suis pas sûr de savoir comment obtenir le chemin absolu de l'URL. À l'heure actuelle, mon programme est codé en dur pour utiliser quelque chose comme:Asp.Net Chemin absolu d'une URL

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

Il est intéressant de noter que je teste actuellement sur mon serveur IIS local, donc il y a une tendance étrange pour beaucoup de choses que j'ai essayé d'utiliser afin que le chemin absolu n'inclue pas le nom de domaine (mon IIS local n'est pas visible à l'extérieur). Ce qui signifie que ce n'est pas un chemin absolu et donc la base href va l'anéantir.

Existe-t-il un bon moyen de gérer cela de telle sorte qu'il fonctionnera localement sans codage en dur, mais fonctionnera également correctement lorsqu'il est téléchargé sur 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 cette information, mais c'est moche et viole DRY.

+0

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

Répondre

108

Je l'ai 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; 
-9

code:

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

Très mauvaise chose à mettre le mot de passe dans l'URL. Ne fais pas ça. –

2

post Vieux mais voici une autre méthode un peu moins bavard

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

Je l'ai utilisé suivant et cela a fonctionné pour moi le client et le serveur.

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