326 votes

Comment puis-je obtenir l'URL de base de ma webapp dans ASP.NET MVC?

Comment puis-je déterminer rapidement ce que l'URL de la racine est pour mon ASP.NET application MVC? I. e., si IIS est configuré pour servir de ma demande au http://example.com/foo/barpuis, je voudrais être en mesure d'obtenir l'URL dans un moyen fiable qui n'implique pas l'obtention de l'URL actuelle de la demande et de l'adoucir dans certains fragile manière qui rompt si je re-router mon action.

La raison que j'ai besoin de l'URL de base est que cette application web en appelle un autre qui a besoin de la racine de l'appelant application web pour rappel fins.

427voto

tghw Points 14244

En supposant que vous avez un objet Request disponible, vous pouvez utiliser:

 string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
 

Si ce n'est pas disponible, vous pouvez y accéder via le contexte:

 var request = HttpContext.Current.Request
 

131voto

Serj Sagan Points 2731

Donc, aucun de ceux listés ici n'a fonctionné pour moi, mais en utilisant quelques-unes des réponses, j'ai quelque chose qui fonctionne:

 public string GetBaseUrl()
{
    var request = HttpContext.Current.Request;
    var appUrl = HttpRuntime.AppDomainAppVirtualPath;

    if(!string.IsNullOrWhiteSpace(appUrl)) appUrl += "/";

    var baseUrl = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, appUrl);

    return baseUrl;
}
 

76voto

mxasim Points 656

Dans du code:

 Url.Content("~/");
 

MVC3 Razor Syntaxe:

 @Url.Content("~/")
 

45voto

Bronek Points 1476

Peut-être que c'est l'extension ou la modification des réponses postées ici mais que j'utilise simplement en suivant et cela fonctionne:

 Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~")
 

Quand mon chemin est: http://host/iis_foldername/controller/action
alors je reçois: http://host/iis_foldername/

25voto

Wyatt Barnett Points 12541

L'astuce en s'appuyant sur IIS est que les liaisons IIS peuvent être différentes de vos URL publiques (WCF je vous regarde), en particulier avec les machines de production multi-hébergées. J'ai tendance à utiliser la configuration pour définir explicitement l'url "de base" à des fins externes car cela a tendance à être un peu plus efficace que de l'extraire de l'objet Request.

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