Je construis un site ASP.NET MVC sur lequel 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 le my IndexWriter
as 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
c'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, 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?
la source
Je pense que tu peux essayer ça pour appeler d'une classe
* ---------------- Désolé j'ai oublié, car la fonction statique a déjà répondu à la question à la dérive *
Mettre à jour
J'ai eu une exception lors de l'utilisation
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Détails 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éla source
Server.MapPath()
autorise un chemin de "files / file1.doc". Il utilise le contexte actuel pour déterminer le chemin de la page actuelle, par exemple, puis crée le chemin relatif à partir de là. Si nous sommes~/Subfolder/Page1.aspx
dedans, l'URL mappera à partir de~/Subfolder/files/file1.doc
. LeHostingEnviornment.MapPath()
est statique et requiert donc toujours le chemin virtuel complet, en commençant par la~/
partie de l'url.