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.MapPathstatic.

HostingEnvironment.MapPath다음과 같은 값 을 반환하는 확인은이 SO 질문을 참조하십시오 Server.MapPath. Server.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/");

예 : System.ArgumentException : 여기서 상대 가상 경로 'SignatureImages'는 허용되지 않습니다. System.Web.VirtualPath.FailIfRelativePath ()에서

솔루션 (정적 웹 메소드에서 테스트 됨)

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


1
업데이트에서 언급 한 오류를 본 유일한 시간은 코드가 상대 가상 경로를 사용했을 때입니다. 예를 들어, Server.MapPath()"files / file1.doc"경로를 허용합니다. 예를 들어 현재 컨텍스트를 사용하여 현재 페이지의 경로를 결정한 다음 거기에서 상대 경로를 만듭니다. 에있는 경우 ~/Subfolder/Page1.aspxURL은에서 매핑됩니다 ~/Subfolder/files/file1.doc. 는 HostingEnviornment.MapPath()정적, 따라서 항상 시작으로, 전체 가상 경로를 필요로 ~/URL의 일부.
ps2goat 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.