Ich erstelle eine ASP.NET MVC-Site, auf der ich Lucene.Net für Suchanfragen verwende. Ich habe hier eine Frage gestellt, wie die Verwendung von Lucene.Net in einer ASP.NET MVC-Anwendung richtig strukturiert werden kann, und mir wurde gesagt, dass die beste Methode darin besteht, my IndexWriter
als zu deklarieren public static
, damit es wiederverwendet werden kann.
Hier ist ein Code, der sich oben in meinem SearchController befindet:
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);
Wie writer
statisch, IndexLocation
muss auch statisch sein. Daher gibt mir der Compiler den folgenden Fehler Server.MapPath()
:
Für das nicht statische Feld, die Methode oder die Eigenschaft 'System.Web.Mvc.Controller.Server.get' ist eine Objektreferenz erforderlich.
Gibt es eine Möglichkeit, Server.MapPath () oder ähnliches aus einem statischen Feld zu verwenden ? Wie kann ich diesen Fehler beheben?
quelle
Ich denke, Sie können dies versuchen, um aus einer Klasse anzurufen
* ---------------- Sorry ich übersehen, für statische Funktion hat die Frage bereits von adrift beantwortet *
Aktualisieren
Ich habe eine Ausnahme bei der Verwendung
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Ex-Details: System.ArgumentException: Der relative virtuelle Pfad 'SignatureImages' ist hier nicht zulässig. bei System.Web.VirtualPath.FailIfRelativePath ()
Lösung (getestet in statischer Webmethode)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Hat funktioniertquelle
Server.MapPath()
Ermöglicht beispielsweise den Pfad "files / file1.doc". Es verwendet beispielsweise den aktuellen Kontext, um den Pfad der aktuellen Seite zu bestimmen, und erstellt dann den relativen Pfad von dort. Wenn wir in sind~/Subfolder/Page1.aspx
, würde die URL von abbilden~/Subfolder/files/file1.doc
. DasHostingEnviornment.MapPath()
ist statisch und erfordert daher immer den vollständigen virtuellen Pfad, beginnend mit dem~/
Teil der URL.