web-dev-qa-db-fra.com

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

Je construis un site ASP.NET MVC sur lequel j'utilise Lucene.Net pour les requêtes de recherche. I a posé une question ici sur la manière de structurer correctement l'utilisation de Lucene.Net dans une application ASP.NET MVC et a été informé que la meilleure méthode consiste à déclarer le my IndexWriter comme public static, Afin qu'il puisse être réutilisé.

Voici un code qui se trouve 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 également être statique. Ainsi, le compilateur me donne l'erreur suivante pour Server.MapPath():

Une référence d'objet est requise pour le champ non statique, la méthode ou la propriété 'System.Web.Mvc.Controller.Server.get'.

Existe-t-il une manière d'utiliser Server.MapPath () ou quelque chose de similaire à partir d'un champ statique ? Comment puis-je réparer cette erreur?

110
Maxim Zaslavsky

Essayez HostingEnvironment.MapPath , qui est static.

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

230
Jeff Ogata

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

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

* ---------------- Désolé, je surveille, pour la fonction statique déjà répondu à la question par à la dérive *

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

Mise à jour

J'ai eu une exception en utilisant System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Détails Ex: System.ArgumentException: le chemin virtuel relatif 'SignatureImages' n'est pas autorisé ici. sur System.Web.VirtualPath.FailIfRelativePath ()

Solution (testé dans la méthode Web statique)

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

41
panky sharma