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


116

検索クエリにLucene.Netを使用しているASP.NET MVCサイトを構築しています。私はここに質問を適切にASP.NET MVCアプリケーションでLucene.Net使用量を構築する方法について、最良の方法は私の宣言することであると言われたIndexWriterようpublic 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()または類似のものを使用する方法はありますか?このエラーを修正するにはどうすればよいですか?

回答:


240

試してみてくださいHostingEnvironment.MapPathです、static

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


HostingEnvironment.MapPathによって妨害された結果がServer.MapPathと同じではないため、この関数はエラーを返しました。後者は相対URLではなく絶対URLを返します
John

@john、両方に同じ値を取得します。
ps2goat 2014

45

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

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

* ----------------申し訳ありませんが、静的関数は既にドリフトによって質問に回答しています*

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

更新

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

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

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

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


1
更新で言及したエラーを私が見たのは、コードが相対仮想パスを使用したときだけです。たとえばServer.MapPath()、「files / file1.doc」のパスを許可します。たとえば、現在のコンテキストを使用して現在のページのパスを特定し、そこから相対パスを作成します。にいる場合~/Subfolder/Page1.aspx、URLはからマップされ~/Subfolder/files/file1.docます。HostingEnviornment.MapPath()静的であるため、常に始まる、完全な仮想パスを必要と~/URLの一部。
ps2goat 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.