Question

Je construis un site ASP.NET MVC où je suis à l'aide Lucene.Net pour les requêtes de recherche. Je posé une question ici sur la façon de structurer correctement l'utilisation Lucene.Net dans une application ASP.NET MVC et a été dit que la meilleure méthode est de déclarer la ma IndexWriter comme public static, de sorte qu'il peut être utilisé re.

Voici un code qui est au sommet 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 requis pour le champ non statique, la méthode ou la propriété « System.Web.Mvc.Controller.Server.get »

Y at-il une façon d'utiliser Server.MapPath () ou quelque chose de similaire à partir d'un champ statique ? Comment puis-je corriger cette erreur?

Était-ce utile?

La solution

HostingEnvironment.MapPath , qui est static.

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

Autres conseils

Je pense que vous pouvez essayer d'appeler à partir d'une classe

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

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

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

Mise à jour

Je suis exception en utilisant System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Ex Détails: System.ArgumentException: le chemin virtuel par rapport « SignatureImages » ne sont pas autorisés ici. à System.Web.VirtualPath.FailIfRelativePath ()

Solution (testé webmethod statique)

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top