2010-09-25 22 views
85

Sto costruendo un sito ASP.NET MVC in cui sto utilizzando Lucene.Net per le query di ricerca. I asked a question here su come strutturare correttamente l'utilizzo di Lucene.Net in un'applicazione ASP.NET MVC e mi è stato detto che il metodo migliore è dichiarare il mio IndexWriter come public static, in modo che possa essere riutilizzato.Utilizzo di Server.MapPath() all'interno di un campo statico in ASP.NET MVC

Ecco alcuni codice che è in cima alla mia 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); 

Come writer è statica, IndexLocation deve anche essere statica. Così, il compilatore mi dà il seguente errore per Server.MapPath():

è necessario un riferimento all'oggetto per il campo non statico, metodo o proprietà 'System.Web.Mvc.Controller.Server.get'

Esiste un modo di utilizzare Server.MapPath() o qualcosa di simile da un campo statico? Come posso risolvere questo errore?

Grazie in anticipo.

risposta

198

Prova HostingEnvironment.MapPath, che è static.

Vai a questa domanda SO la conferma che HostingEnvironment.MapPath restituisce lo stesso valore di Server.MapPath: What is the difference between Server.MapPath and HostingEnvironment.MapPath?

+0

Questa funzione dava un errore come risultato returbed da HostingEnvironment.MapPath non viene lo stesso di Server.MapPath, quest'ultimo restituisce un url assoluto non un url relativo – John

+0

@john, ottengo lo stesso valore per entrambi. – ps2goat

28

penso che si può provare questo per chiamare a partire da una classe

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/"); 

* ----- ----------- mi dispiace di supervisione, per la funzione statica già risposto alla domanda dalla deriva *

System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/"); 

Aggiornamento

ho ottenuto un'eccezione durante l'utilizzo System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Es dettagli: System.ArgumentException: Il percorso 'SignatureImages' virtuali relativi non è permesso qui. a System.Web.VirtualPath.FailIfRelativePath()

Solution (testato in webmethod statica)

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");lavorata

+1

L'unica volta che ho visto l'errore che hai menzionato nel tuo aggiornamento è quando il codice utilizzava un percorso virtuale relativo. Ad esempio, 'Server.MapPath()' consente un percorso di "file/file1.doc". Utilizza il contesto corrente per determinare il percorso della pagina corrente, ad esempio, e quindi crea il percorso relativo da lì. Se siamo in '~/Sottocartella/Pagina1.aspx', l'url dovrebbe mappare da' ~/Sottocartella/file/file1.doc'. 'HostingEnviornment.MapPath()' è statico, e quindi richiede sempre il percorso virtuale completo, a partire dalla parte '~ /' dell'URL. – ps2goat

+0

L'ho usato e non c'è dubbio che non funzionerà. –