Tworzę witrynę ASP.NET MVC, w której używam Lucene.Net do wyszukiwania zapytań. I zadał pytanie tutaj o tym, jak prawidłowo struktury zużycia Lucene.Net w aplikacji ASP.NET MVC i powiedziano mi, że najlepszą metodą jest zadeklarować moja IndexWriter
jak public static
, tak, że może on być ponownie użyte.
Oto kod, który znajduje się na górze mojego 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);
Ponieważ writer
jest statyczny, IndexLocation
musi być również statyczny. W związku z tym kompilator podaje następujący błąd dla Server.MapPath()
:
Odwołanie do obiektu jest wymagane dla niestatycznego pola, metody lub właściwości „System.Web.Mvc.Controller.Server.get”
Czy istnieje sposób użycia Server.MapPath () lub czegoś podobnego z pola statycznego ? Jak mogę naprawić ten błąd?
źródło
Myślę, że możesz tego spróbować, dzwoniąc z klasy
* ---------------- Przepraszam za przeoczenie, ponieważ funkcja statyczna już odpowiedziała na pytanie przez dryf *
Aktualizacja
Wystąpił wyjątek podczas używania
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Ex szczegóły: System.ArgumentException: względna ścieżka wirtualna „SignatureImages” jest tutaj niedozwolona. w System.Web.VirtualPath.FailIfRelativePath ()
Rozwiązanie (przetestowane w statycznej metodzie internetowej)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Pracowałźródło
Server.MapPath()
zezwala na ścieżkę „pliki / plik1.doc”. Na przykład używa bieżącego kontekstu do określenia ścieżki bieżącej strony, a następnie tworzy ścieżkę względną z tego miejsca. Jeśli jesteśmy w~/Subfolder/Page1.aspx
środku, adres URL będzie mapowany z~/Subfolder/files/file1.doc
.HostingEnviornment.MapPath()
Jest statyczny, a więc zawsze wymaga pełnej ścieżki wirtualnej, zaczynając od~/
części adresu URL.