2010-09-25 38 views
85

Tôi đang xây dựng trang ASP.NET MVC nơi tôi đang sử dụng Lucene.Net cho các truy vấn tìm kiếm. Tôi asked a question here về cách cấu trúc đúng cách sử dụng Lucene.Net trong một ứng dụng ASP.NET MVC và được cho biết rằng phương pháp tốt nhất là khai báo IndexWriter của tôi là public static, để nó có thể được tái sử dụng.Sử dụng Server.MapPath() bên trong một trường tĩnh trong ASP.NET MVC

Dưới đây là một số mã có nghĩa là ở đầu SearchController tôi:

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

Như writer là tĩnh, IndexLocation cũng phải tĩnh. Do đó, trình biên dịch là cho tôi những lỗi sau đây cho Server.MapPath():

Một tham chiếu đối tượng là cần thiết cho các phi trường tĩnh, phương pháp, hoặc tài sản 'System.Web.Mvc.Controller.Server.get'

Có cách nào cách sử dụng Server.MapPath() hoặc nội dung nào đó tương tự từ trường tĩnh? Làm thế nào tôi có thể sửa lỗi này?

Cảm ơn bạn trước.

Trả lời

198

Hãy thử HostingEnvironment.MapPath, là static.

Xem câu hỏi này SO xác nhận rằng HostingEnvironment.MapPath trả về giá trị tương tự như Server.MapPath: What is the difference between Server.MapPath and HostingEnvironment.MapPath?

+0

Chức năng này đã cho tôi một lỗi như là kết quả returbed bởi HostingEnvironment.MapPath không giống như Server.MapPath, sau này trả lại một url tuyệt đối không phải là một url tương đối – John

+0

@ john, tôi nhận được cùng một giá trị cho cả hai. – ps2goat

28

Tôi nghĩ rằng bạn có thể thử này để gọi từ một lớp

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

* ----- ----------- Xin lỗi tôi giám sát, cho chức năng tĩnh đã trả lời câu hỏi bởi adrift *

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

Cập nhật

tôi có ngoại lệ khi sử dụng System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

chi tiết Ex: System.ArgumentException: Con đường ảo 'SignatureImages' tương đối không được phép ở đây. tại System.Web.VirtualPath.FailIfRelativePath()

Solution (thử nghiệm trong WebMethod tĩnh)

System.Web.HttpContext.Current.Server.MapPath("~/SignatureImages/");Làm việc

+1

Thời gian duy nhất tôi thấy lỗi bạn đã đề cập trong bản cập nhật của bạn là khi mã sử dụng đường dẫn ảo tương đối. Ví dụ, 'Server.MapPath()' cho phép một đường dẫn của "files/file1.doc". Nó sử dụng ngữ cảnh hiện tại để xác định đường dẫn của trang hiện tại, và sau đó tạo đường dẫn tương đối từ đó. Nếu chúng ta đang ở trong '~/Subfolder/Page1.aspx', url sẽ ánh xạ từ' ~/Subfolder/files/file1.doc'. 'HostingEnviornment.MapPath()' là tĩnh và do đó luôn yêu cầu đường dẫn ảo đầy đủ, bắt đầu bằng phần '~ /' của url. – ps2goat

+0

Tôi đã sử dụng nó và không nghi ngờ rằng nó sẽ không hoạt động. –

Các vấn đề liên quan