À L'Aide De Server.MapPath () à l'intérieur d'un champ statique en ASP.NET MVC

je construis un ASP.NET site MVC où j'utilise Lucene.Net pour les recherches. I a posé une question ici sur la façon de structurer correctement Lucene.Net utilisation dans un ASP.NET MVC application et a été informé que la meilleure méthode est de déclarer le my IndexWriter comme public static , afin qu'il puisse être réutilisé.

voici du code qui est en haut de mon SearchController:

public static string IndexLocation = Server.MapPath("~/lucene");
public static Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
public static IndexWriter writer = new IndexWriter(IndexLocation,analyzer);

comme writer est statique, IndexLocation doit aussi être statique. Ainsi, le compilateur me donne l'erreur suivante pour Server.MapPath() :

une référence à un objet est requise pour le système non statique d'un champ, d'une méthode ou d'une propriété.Web.Mvc.Contrôleur.Serveur.get'

Est-il une façon d'utiliser le Serveur.MapPath () ou quelque chose de similaire dans un champ statique ? Comment puis-je corriger cette erreur?

98
demandé sur Uwe Keim 2010-09-26 03:32:31

2 réponses

Essayer HostingEnvironment.MapPath , qui est static .

voir cette question pour la confirmation que HostingEnvironment.MapPath renvoie la même valeur que Server.MapPath : Quelle est la différence entre le serveur.MapPath and HostingEnvironment.MapPath?

216
répondu Jeff Ogata 2017-05-23 12:10:43

je pense que vous pouvez essayer ce pour des appels à partir d'une classe

 System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");

* ----------------Désolé j'ai oublié, pour la fonction statique déjà répondu à la question par adrift*

System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

mise à Jour

j'ai obtenu d'exception lors de l'utilisation System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Ex détails: système.ArgumentException: le chemin virtuel relatif 'SignatureImages' est pas autorisés ici. au Système.Web.VirtualPath.FailIfRelativePath ()

Solution (testée en webméthode statique)

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/"); ouvré

34
répondu panky sharma 2013-10-31 12:31:19