49 votes

Obtenir le chemin de l'application sans utiliser le httpcontext. (asp.net)

Comment faire ?

Je ne veux pas utiliser ça :

HttpContext.Current.Server.MapPath

Existe-t-il une fonction similaire que je peux appeler sans avoir besoin d'un httpcontext ?

Par exemple, si je démarre un fil de discussion, je ne peux pas utiliser le contexte http, mais j'ai toujours besoin d'obtenir le chemin de l'application. Et non, je ne peux pas passer le contexte comme un argument ou le lire à partir d'une variable partagée.

72voto

SLaks Points 391154

Utilisez le HttpRuntime.AppDomainAppPath propriété.

56voto

qub1n Points 817

Il existe plusieurs options :

HttpRuntime.AppDomainAppPath

    WebApplication     -> Web root folder
    UnitTest           -> ArgumentNullException
    ConsoleApplication -> ArgumentNullException

AppDomain.CurrentDomain.BaseDirectory

    WebApplication     -> Web root folder
    UnitTest           -> ...\AppDir\bin\Debug
    ConsoleApplication -> ...\AppDir\bin\Debug

HostingEnvironment.ApplicationPhysicalPath

    WebApplication     -> Web root folder
    UnitTest           -> null
    ConsoleApplication -> null

Je recommande d'utiliser AppDomain.CurrentDomain.BaseDirectory, car il peut être utilisé dans n'importe quel type de projet et il peut être configuré.

Vous pouvez par exemple définir UnitTest BaseDirectory pour faire pointer le dossier racine de votre site web vers AppDomain.CurrentDomain.BaseDirectory par commande :

AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");

1voto

Alexei Points 3124

J'ai rencontré cette question en cherchant un moyen de calculer une URL (permaliens dans l'application Web) à fournir dans certaines notifications par e-mail.

Ils ont été générés sur un autre fil, donc HttpContext n'était pas disponible et je voulais éviter de mettre des informations relatives aux URL dans la table de file d'attente utilisée pour générer les e-mails.

Le code :

public static String GetCurrentAppDomainBasePath(String prefix = "http://")
{
   return String.Format("{0}{1}{2}", 
      prefix,
      System.Net.Dns.GetHostEntry("").HostName, 
      System.Web.HttpRuntime.AppDomainAppVirtualPath
   );
}

La fonction renvoie le chemin virtuel complet comme : http://full-host-name/AppName . Bien sûr, il y a quelques limitations : le protocole codé en dur ( http , https etc.) et en utilisant hostname au lieu de domain name (échoue si plusieurs domaines sont définis sur une seule machine).

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