44 votes

httpcontext.current.server.mappath Référence d'objet non définie sur une instance d'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 lorsqu'il ouvrira le fichier, l'erreur suivante est générée :

La référence d'objet n'est pas définie sur une instance d'objet.

86voto

nickyt Points 3399

N'utilisez pas Server.MapPath. C'est lent. Utilisez-le à la place, HttpRuntime.AppDomainAppPath. Tant que votre site Web est en cours d'exécution, cette propriété est toujours disponible pour vous.

Alors utilisez-le comme ceci :

string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");

7voto

The Conspiracy Points 2235

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 l'espace de noms System.Web.Hosting

string filePath = HostingEnvironment.MapPath("~/email/teste.html");

1voto

Gurunath Rao Points 85

Vous pouvez utiliser quelque chose comme le morceau de code suivant. Une chose à noter est que je faisais face à un problème, où j'essayais d'accéder à un fichier .txt à partir d'un TestMethod et tout échouait sauf pour cela...et oui, cela fonctionne aussi pour les scénarios de test non-Unit.

string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,@"..\..") + "\\email\\teste.html";

0voto

Rajeev Kumar Points 11

Problème : J'avais un dossier "Images" dans un projet de bibliothèque de classe. Mais en utilisant les réponses ci-dessus, je n'ai pas pu obtenir le chemin physique du dossier pour lire/écrire les fichiers à l'intérieur de ce dossier.

Solution : Le code ci-dessous a fonctionné pour moi afin d'obtenir un chemin physique dans le projet de bibliothèque de classe.

string physicalPath = System.IO.Path.GetFullPath("..\\..\\Images");

J'espère que cela aidera quelqu'un qui fait face au même problème que moi.

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