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).