Verwendung Server.MapPath () innerhalb eines statischen Feldes in ASP.NET MVC
-
05-10-2019 - |
Frage
Ich baue eine Website ASP.NET MVC, wo ich bin mit Lucene.Net für Suchanfragen. Ich stellte eine Frage hier darüber, wie, wenn man so richtig Lucene.Net Verwendung in einer ASP.NET MVC-Anwendung strukturieren und ich wurde gesagt, dass die beste Methode, um die meine IndexWriter
als public static
zu erklären ist, dass es wiederverwendet werden kann.
Hier ist ein Code, der an der Spitze meines SearchController ist:
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);
Als writer
statisch ist, IndexLocation
müssen auch statisch sein. Somit wird der Compiler mir die folgende Fehlermeldung für Server.MapPath()
geben:
Eine Objektreferenz für die nicht-statisches Feld erforderlich, eine Methode oder eine Eigenschaft ‚System.Web.Mvc.Controller.Server.get‘
Gibt es eine Art und Weise der Verwendung von Server.MapPath () oder etwas ähnlichem von einem statischen Feld ? Wie kann ich diesen Fehler beheben?
Lösung
Versuchen Sie HostingEnvironment.MapPath
, die static
ist.
Sehen Sie diese Frage SO für die Bestätigung, dass HostingEnvironment.MapPath
den gleichen Wert wie Server.MapPath
zurückgibt: Was ist der Unterschied zwischen Server.MapPath und HostingEnvironment.MapPath ist?
Andere Tipps
ich glaube, Sie können versuchen, diese für den Aufruf in einer Klasse
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
* ---------------- Sorry, ich Aufsicht, für statische Funktion bereits beantwortet die Frage von adrift *
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Aktualisieren
Ich habe Ausnahme bei der Verwendung von System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Ex Details: System.ArgumentException: Der relativ virtuelle Pfad 'SignatureImages' ist hier nicht erlaubt. bei System.Web.VirtualPath.FailIfRelativePath ()
Solution (getestet in statischer Webmethod)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Arbeitet