L'utilisation Server.MapPath () à l'intérieur d'un champ statique dans ASP.NET MVC
-
05-10-2019 - |
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?
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é