Utilisation de Server.MapPath () dans un champ statique dans ASP.NET MVC

Je construis un site ASP.NET MVC où j’utilise Lucene.Net pour les requêtes de recherche. J’ai posé une question ici sur la façon de structurer correctement l’utilisation de Lucene.Net dans une application ASP.NET MVC et on m’a dit que la meilleure méthode consiste à déclarer my IndexWriter comme public static , afin qu’il puisse être réutilisé.

Voici un code en haut de mon SearchController:

 public static ssortingng 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 le writer est statique, IndexLocation doit également être statique. Ainsi, le compilateur me donne l’erreur suivante pour Server.MapPath() :

Une référence d’object est requirejse pour le champ, la méthode ou la propriété non statique ‘System.Web.Mvc.Controller.Server.get’

Existe-t-il un moyen d’utiliser Server.MapPath () ou quelque chose de similaire à partir d’un champ statique ? Comment puis-je corriger cette erreur?

Essayez HostingEnvironment.MapPath , qui est static .

Voir cette question SO pour confirmer que HostingEnvironment.MapPath renvoie la même valeur que Server.MapPath : Quelle est la différence entre Server.MapPath et HostingEnvironment.MapPath?

Je pense que vous pouvez essayer ceci pour appeler d’une classe

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

* —————- Désolé, je supervise, car la fonction statique a déjà répondu à la question par dérive *

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

Mettre à jour

J’ai eu une exception lors de l’utilisation de System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Détails de l’ex: System.ArgumentException: le chemin virtuel relatif ‘SignatureImages’ n’est pas autorisé ici. à System.Web.VirtualPath.FailIfRelativePath ()

Solution (testée en méthode Web statique)

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