J'utilise le code suivant dans une classe:
string filePath = HttpContext.Current.Server.MapPath("~/email/teste.html");
Le fichier teste.html est dans le dossier
Mais quand il ouvrira le fichier, l'erreur suivante est générée:
La référence d'objet n'est pas définie à une instance d'un objet.
N'utilisez pas Server.MapPath. C'est lent. Utilisez-le à la place, HttpRuntime.AppDomainAppPath
. Tant que votre site Web fonctionne, cette propriété est toujours à votre disposition.
Ensuite, utilisez-le comme ceci:
string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");
si le code ne s'exécute pas à partir d'un thread exécute un httprequest
alors HttpContext.Current
est null
(par exemple lorsque votre méthode est appelée via BeginInvoke
) - voir http://forums.asp.net/t/1131004.aspx/1 =.
Vous pouvez toujours utiliser HttpRuntime
voir http://msdn.Microsoft.com/en-us/library/system.web.httpruntime.aspx
S'il n'y a pas de HttpContext
(par exemple lorsque la méthode est appelée via BeginInvoke
, comme Yahia l'a souligné), l'appel à HttpContext.Current.Server.MapPath()
doit échouer. Pour ces scénarios, il y a HostingEnvironment.MapPath()
dans le System.Web.Hosting
espace de noms.
string filePath = HostingEnvironment.MapPath("~/email/teste.html");