Usando Server.MapPath () dentro de un campo estático en ASP.NET MVC
-
05-10-2019 - |
Pregunta
Estoy construyendo un sitio ASP.NET MVC donde yo estoy usando Lucene.Net las consultas de búsqueda. Me hecho una pregunta aquí acerca de cómo estructurar adecuadamente el uso Lucene.Net en una aplicación ASP.NET MVC y me dijeron que el mejor método es declarar la mi IndexWriter
como public static
, de modo que pueda ser reutilizada.
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ática, IndexLocation
también debe ser estática. Por lo tanto, el compilador me da el siguiente error de Server.MapPath()
:
Se requiere una referencia de objeto para el campo no estático, el método o propiedad 'System.Web.Mvc.Controller.Server.get'
¿Hay una forma de usar Server.MapPath () o algo similar de un campo estático ? ¿Cómo puedo solucionar este error?
Solución
Trate HostingEnvironment.MapPath
, que es static
.
Vea esta pregunta SO confirmación de que HostingEnvironment.MapPath
devuelve el mismo valor que Server.MapPath
: ¿Cuál es la diferencia entre Server.MapPath y HostingEnvironment.MapPath?
Otros consejos
Creo que se puede probar esto para llamar desde una clase
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
* ---------------- I supervisión Lo siento, para la función estática ya ha respondido a la pregunta ??em> por la deriva *
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Actualizar
Tengo una excepción durante el uso de System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Detalle del Ex: System.ArgumentException: no se permite aquí Las relativos de ruta '' SignatureImages virtuales. en System.Web.VirtualPath.FailIfRelativePath ()
Solution (probado en WebMethod estática)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Trabajado