Bir ASP.NET MVC web uygulamasında HttpContext olmadan çalışan bazı işlemler var. Bu işlem, veri okuma/yazma için uygulamanın İçindekiler dizinine fiziksel yolu belirleyebilmelidir. Ancak, bir HttpContext olmadan olduğu için Server.MapPath ve benzeri gibi süslü şeyler kullanamıyorum. Öneriler?HttpContext olmadan bir dosyanın fiziksel yolunu nasıl belirlersiniz?
cevap
bunun nedeni yürütme yolunun belirli anlarında, HttpRuntime.AppDomainAppPath
kullanmak en iyisidir, hiçbir HttpContext.Current
yok.
Ayrıca bkz. this post.
Neden HttpRuntime.AppDomainPath, AppDomain.BaseDirectory? ' – Matt
'dan daha iyi anlamlıdır. HttpRuntime içinde olduğunuzda, çalışma zamanını kendinize dolamak yerine doğru yolu sormak daha iyidir. Ayrıca, kodunuzu daha okunabilir hale getirir ve daha net düşünür. Son olarak, uygulamalar değişebilir, ancak bu durumda bile, HttpRuntime yine de doğru yolu döndürür ve AppDomain olmaz (aynı AppDomain'i başlattığınız nadir durumlar için de geçerli olabilir). – Abel
Teşekkürler. AppDomainAppPath değil AppDomainPath (en azından .NET4) – Matt
Bunu yapmanın en iyi yolu, AppDomain.BaseDirectory
özelliğini kullanmaktır. Özel uygulama alanlarıyla çalışmadığınız sürece, kök uygulama dizininize işaret eder. Diğer bir deyişle; Bu iki dize aynı olacaktır: (site başladığında yani) bir web sitesinde
string mapUsingAppDomain = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Contents");
string mapUsingServer = HttpContext.Current.Server.MapPath("~/Contents");
- 1. Dizinde hangi dosyanın ASP.NET'i yükleyeceğini nasıl belirlersiniz?
- 2. ServerManager Sitenin fiziksel yolunu diskte nasıl edinilir?
- 3. ASP.NET: Bir dosyanın sanal yolunu genel işleyiciden nasıl edinebilirim?
- 4. Yeni bir HttpContext nasıl oluşturabilirim?
- 5. Dosyanın mutlak yolunu almanın yolu PHP
- 6. Geçerli kaynak dosyanın yolunu balıkla birlikte al
- 7. Geçerli bir SoapAction'ı nasıl belirlersiniz?
- 8. HttpContext Web sitesinden HttpHandlers Kayıtlı Olun HttpContext
- 9. Groovy komut dosyalarını en iyi jar'ı kullanarak çalıştırırken, bir sınıf yolunu nasıl belirlersiniz?
- 10. Nasıl "Host:" başlığı HttpContext (asp.net)
- 11. HttpContext.Current kullanmadan bir ASP.NET web uygulamasının fiziksel konumunu nasıl edinilir?
- 12. Sanal dizin fiziksel yolu nasıl edinilir
- 13. HttpContext .Current Hiçbir şey
- 14. Bir işlevin ad alanını nasıl belirlersiniz?
- 15. ANTLR'de, belirli bir tekrar sayısını nasıl belirlersiniz?
- 16. WPF'de XAML kullanarak bir dizinde iç içe geçmiş bir dosyanın yolunu nasıl belirleyebilirim?
- 17. IRouteConstraint süzgeç yolunu nasıl yapılır?
- 18. UIPopoverController'ın içerik boyutunu nasıl belirlersiniz?
- 19. Android - OnDateChangedListener - bunu nasıl belirlersiniz?
- 20. asp.net önbellek httpcontext içinde
- 21. Birim testinde httpcontext kullanma
- 22. HttpContext, WCF hizmetinde null?
- 23. Bir dosyanın
- 24. bir dosyanın
- 25. WCF RequestInterceptor İçinde HttpContext Erişimi
- 26. Herhangi bir veritabanının fiziksel dosya yolu alın
- 27. .NET bir birim testi için HttpContext nesnesini
- 28. Mac'te görünen adından bir yazı tipinin tam yolunu nasıl bulabilirim?
- 29. Yerel bir geçici dosya olmadan uzak bir dosyanın içeriği nasıl yapılır:
- 30. D3 fiziksel yerçekimi
"HttpContext.Current" null bile olsa, Server.MapPath 'hala çalışır. Eğer "sahibi" yoksa, belki de "System.Web" referansını kaçırdığınızı mı kastediyorsunuz? – Abel
@Abel: "Sunucu", örneğin, "Sunucu", HttpContext.Current (ve ayrıca bir HttpApplication özelliği) özelliğidir, çünkü, bir statik yapıcı içinde .MapPath kullanmak için "Sunucu" için bir başvuru "sahip" olmaz. Bu tür statik bir ortamda güvenilir bir şekilde mevcut olacaktır. "Sunucu", yapıcısı dahili olan "HttpServerUtility" türündendir; bu nedenle, HttpContext.Current veya Global.asax'ta HttpApplication'dan elde edemediğiniz sürece bunu kullanamazsınız. Bu nedenle, HttpRuntime.AppDomainAppPath, aşağıdaki cevabınızda gönderdiğiniz şekilde kullanılmalıdır. – Triynko