web-dev-qa-db-ja.com

ASP.NET MVCの静的フィールド内でServer.MapPath()を使用する

検索クエリにLucene.Netを使用しているASP.NET MVCサイトを構築しています。 I ここで質問しました ASP.NET MVCアプリケーションでLucene.Netの使用を適切に構成する方法について、最良の方法はmy IndexWriterpublic staticとして宣言することであると言われました。再利用できます。

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);

writerは静的であるため、IndexLocationも静的でなければなりません。したがって、コンパイラはServer.MapPath()に対して次のエラーを表示します。

オブジェクト参照は、非静的フィールド、メソッド、またはプロパティ「System.Web.Mvc.Controller.Server.get」に必要です

Server.MapPath()または静的フィールドから類似したものを使用する方法はありますか?このエラーを修正するにはどうすればよいですか?

110
Maxim Zaslavsky

HostingEnvironment.MapPath を試してください。これはstaticです。

HostingEnvironment.MapPathServer.MapPathと同じ値を返すことの確認については、このSOの質問を参照してください。 Server.MapPathとHostingEnvironment.MapPathの違いは何ですか?

230
Jeff Ogata

クラスから呼び出すためにこれを試すことができると思います

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

*----------------すみません、静的関数はすでに質問に答えました

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

更新

System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");の使用中に例外が発生しました

例の詳細:System.ArgumentException:相対仮想パス「SignatureImages」はここでは許可されていません。 System.Web.VirtualPath.FailIfRelativePath()で

ソリューション(静的Webメソッドでテスト済み)

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");作業済み

41
panky sharma