2009-07-29 9 views

Odpowiedz

110

Nazywając go?

var path = System.Web.HttpContext.Current.Server.MapPath("default.aspx"); 

Należy dodać odniesienie do zestawu System.Web.

+0

Należy powiedzieć, że zestaw system.web nie istnieje w .NET framework 4 – Arash

+12

Najgorsze rozwiązanie! Co się stanie, jeśli będziemy musieli korzystać z klas Business Layer poza kontekstem HTTP? –

+4

Oto odpowiednia odpowiedź http://stackoverflow.com/questions/12294458/asp-net-mvc-4-use-server-mappath-in-business-layer –

7

Należy odwołać System.Web i zadzwonić:

HttpContext.Current.Server.MapPath(...) 
4

Może mógłby streszczenie to jako uzależnienia i utworzyć IVirtualPathResolver. W ten sposób Twoje klasy usług nie będą związane z System.Web i możesz utworzyć kolejną implementację, jeśli chcesz ponownie wykorzystać swoją logikę w innej technologii interfejsu użytkownika.

16

Ścieżkę podstawową można uzyskać, używając poniższego kodu i dodając do tego ścieżkę.

string path = System.AppDomain.CurrentDomain.BaseDirectory; 
1

HostingEnvironment.MapPath

System.Web.Hosting.HostingEnvironment.MapPath (ścieżka);

0

Architektonicznie, System.web nie powinien być skierowany w Business Logic Layer (BLL). Zastosuj BLL do struktury rozwiązania, aby postępować zgodnie z zasadą odrębnej kwestii, dlatego polecaj System.Web to zła praktyka. BLL nie powinien ładować/uruchamiać w kontekście Asp.net. Z tego powodu powinieneś rozważyć użycie System.AppDomain.CurrentDomain.BaseDirectory zamiast System.Web.HttpContext.Current.Server.MapPath