2010-09-10 4 views
6

Le code ci-dessous est un hack terrible.Comment obtenir la racine Url

Uri linkUri = HttpContext.Current.Request.Url; 
string link = linkUri.ToString().Substring(0, linkUri.ToString().IndexOf("Users/Create")); 

Au lieu de modifier la chaîne, comment puis-je obtenir l'URL correct de la route en premier lieu?

Par exemple, je veux obtenir http://localhost:9999/ au lieu de http://localhost:9999/Users/Create

Répondre

9

Il est assez laid, mais que diriez-vous:

Uri uri = new Uri("http://localhost:9999/Users/Create"); 
string link = string.Format("{0}://{1}:{2}", uri.Scheme, uri.Host, uri.Port); 

Modifier : ou mieux encore:

uri.GetLeftPart(UriPartial.Authority) 
+1

Oui, c'est certainement une amélioration. Je vais attendre et voir quelles autres réponses je reçois, mais c'est le meilleur jusqu'à présent. – arame3333

+1

celui-ci fonctionne pour localhost – ktutnik

17

Vous pouvez utiliser la méthode Content de UrlHelper:

string root = urlHelper.Content("~/"); 
+0

Je reçois un message d'erreur; "Une référence d'objet est requise pour la méthode de champ non statique, ou la propriété 'System.Web.Mvc.UrlHelper.Content (string)'" – arame3333

+1

Oui, vous avez besoin d'une référence à un UrlHelper. Si vous écrivez ce code dans un contrôleur, vous avez déjà la propriété 'Url' sur laquelle vous pouvez appeler la méthode' Content'. Si c'est dans une vue: '<% = Url.Content (" ~/")%>'. –

+1

Je n'utilise pas ce code dans une vue. Je code dans une classe, où UrlHelper n'a pas de méthode Content. – arame3333

Questions connexes