Récupère le chemin de l’application sans utiliser httpcontext. (asp.net)

Comment faire?

Je ne veux pas utiliser ceci:

HttpContext.Current.Server.MapPath 

Existe-t-il une fonction similaire que je peux appeler sans requérir de httpcontext?

Par exemple, si un thread commence à faire des choses, je ne peux pas utiliser le httpcontext, mais je dois toujours trouver le chemin de l’application. Et non je ne peux pas passer le contexte en argument ou le lire depuis une var partagée.

Utilisez la propriété HttpRuntime.AppDomainAppPath .

Il y a 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 peut être configuré.

Vous pouvez par exemple définir UnitTest BaseDirectory pour pointer votre dossier racine Web vers AppDomain.CurrentDomain.BaseDirectory par commande:

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

J’ai rencontré cette question lorsque je cherchais un moyen de calculer une URL (liens permanents dans l’application Web) à inclure dans certaines notifications par courrier électronique.

Celles-ci ont été générées sur un autre thread, donc HttpContext n’était pas disponible et je voulais éviter de mettre des informations relatives à l’URL dans la table de queue utilisée pour générer les e-mails.

Le code:

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

La fonction renvoie le chemin d’access virtuel complet tel que: http://full-host-name/AppName . Bien sûr, il existe certaines limitations: protocole codé en dur ( http , https, etc.) et utilisation du hostname au lieu du domain name de domain name (échec si plusieurs domaines sont définis sur une seule machine).