ASP.NET MVC'de bir statik alan içinde Server.MapPath () kullanma


116

Arama sorguları için Lucene.Net'i kullandığım bir ASP.NET MVC sitesi oluşturuyorum. Ben burada bir soru sordum düzgün bir ASP.NET MVC uygulamasında Lucene.Net kullanımını yapılandırılması konusunda ve en iyi yöntem benim ilan etmek olduğu söylendi IndexWriterolarak public static, bu yüzden olabilir yeniden kullandı.

SearchController'imin en üstünde bulunan bazı kodlar:

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

Gibi writerstatik, IndexLocationaynı zamanda statik olması gerekir. Böylece, derleyici bana şu hatayı veriyor Server.MapPath():

Statik olmayan alan, yöntem veya 'System.Web.Mvc.Controller.Server.get' özelliği için bir nesne başvurusu gereklidir

Server.MapPath () veya statik alandan benzer bir şey kullanmanın bir yolu var mı ? Bu hatayı nasıl düzeltebilirim?

Yanıtlar:


240

Deneyin HostingEnvironment.MapPath, yani static.

ŞununlaHostingEnvironment.MapPath aynı değeri döndüren onay için bu SO sorusuna bakın Server.MapPath: Server.MapPath ile HostingEnvironment.MapPath arasındaki fark nedir?


Bu işlev, HostingEnvironment.MapPath tarafından döndürülen sonuç Server.MapPath ile aynı olmadığından bana bir hata verdi, ikincisi göreceli bir url değil mutlak bir url döndürüyor
John

@john, ikisi için de aynı değeri alıyorum.
ps2goat

45

Sanırım bunu bir sınıftan arayarak deneyebilirsin

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

* ---------------- Üzgünüm, statik işlev soruyu zaten sürükleyerek cevapladı *

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

Güncelleme

Kullanırken istisnam var System.Web.Hosting.HostingEnvironment.MapPath("~/SignatureImages/");

Özel ayrıntılar: System.ArgumentException: 'SignatureImages' göreli sanal yoluna burada izin verilmez. System.Web.VirtualPath.FailIfRelativePath () adresinde

Çözüm (statik web yönteminde test edilmiştir)

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


1
Güncellemenizde bahsettiğiniz hatayı tek gördüğüm zaman, kodun göreceli bir sanal yol kullandığı zamandı. Örneğin, Server.MapPath()"files / file1.doc" yoluna izin verir. Örneğin, geçerli sayfanın yolunu belirlemek için geçerli bağlamı kullanır ve ardından oradan göreceli yolu oluşturur. Eğer biz ~/Subfolder/Page1.aspxiçerideysek, url'den eşlenir ~/Subfolder/files/file1.doc. HostingEnviornment.MapPath()Statik değildir ve bu nedenle her zaman başlayarak tam sanal yolu gerektirir ~/url parçası.
ps2goat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.