web-dev-qa-db-fra.com

httpcontext.current.server.mappath La référence d'objet n'est pas définie sur une instance d'un objet

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.

34
soamazing

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");
74
nickytonline

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

7
Yahia

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");
4
The Conspiracy