Estou construindo um site ASP.NET MVC onde estou usando Lucene.Net para consultas de pesquisa. Eu fiz uma pergunta aqui sobre como estruturar adequadamente o uso do Lucene.Net em um aplicativo ASP.NET MVC e me disseram que o melhor método é declarar o my IndexWriter
as public static
, para que ele possa ser reutilizado.
Aqui está um código que está na parte superior do meu 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
é estático, IndexLocation
também deve ser estático. Portanto, o compilador está me dando o seguinte erro para Server.MapPath()
:
É necessária uma referência de objeto para o campo, método ou propriedade não estático 'System.Web.Mvc.Controller.Server.get'
Existe uma maneira de usar Server.MapPath () ou algo semelhante de um campo estático ? Como posso corrigir esse erro?
fonte
Acho que você pode tentar fazer isso ligando de uma aula
* ---------------- Desculpe esqueci, para a função estática já respondi a pergunta à deriva *
Atualizar
Eu tive uma exceção ao usar
System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");
Detalhes Ex: System.ArgumentException: O caminho virtual relativo 'SignatureImages' não é permitido aqui. em System.Web.VirtualPath.FailIfRelativePath ()
Solução (testado em webmethod estático)
System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");
Trabalhadofonte
Server.MapPath()
permite um caminho de "arquivos / arquivo1.doc". Ele usa o contexto atual para determinar o caminho da página atual, por exemplo, e então cria o caminho relativo a partir daí. Se estivermos em~/Subfolder/Page1.aspx
, o url será mapeado de~/Subfolder/files/file1.doc
. OHostingEnviornment.MapPath()
é estático e, portanto, sempre requer o caminho virtual completo, começando com a~/
parte da url.