Estoy construyendo un sitio ASP.NET MVC donde estoy usando Lucene.Net para consultas de búsqueda. Hice una pregunta aquí sobre cómo estructurar correctamente el uso de Lucene.Net en una aplicación ASP.NET MVC y me dijeron que el mejor método es declarar my IndexWriter
as public static
, para que pueda reutilizarse.
Aquí hay un código que está en la parte superior de mi 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);
Como writer
es estático, IndexLocation
también debe ser estático. Por lo tanto, el compilador me da el siguiente error para Server.MapPath()
:
Se requiere una referencia de objeto para el campo, método o propiedad no estática 'System.Web.Mvc.Controller.Server.get'
¿Hay alguna forma de usar Server.MapPath () o algo similar desde un campo estático ? ¿Cómo puedo solucionar este error?
fuente
Creo que puedes probar esto para llamar desde una clase.
* ---------------- Perdón por descuido, para la función estática ya respondí la pregunta a la deriva *
Actualizar
Obtuve una excepción mientras usaba
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Detalles de Ex: System.ArgumentException: La ruta virtual relativa 'SignatureImages' no está permitida aquí. en System.Web.VirtualPath.FailIfRelativePath ()
Solución (probado en método web estático)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Trabajófuente
Server.MapPath()
permite una ruta de "archivos / archivo1.doc". Utiliza el contexto actual para determinar la ruta de la página actual, por ejemplo, y luego crea la ruta relativa desde allí. Si estamos dentro~/Subfolder/Page1.aspx
, la URL se mapeará desde~/Subfolder/files/file1.doc
. ElHostingEnviornment.MapPath()
es estático y, por lo tanto, siempre requiere la ruta virtual completa, comenzando con la~/
parte de la URL.