2009-07-29 6 views

Antwort

110

Durch sie nennen?

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

Stellen Sie sicher, dass Sie einen Verweis auf die System.Web-Assembly hinzufügen.

+0

in Betracht ziehen, ich sollte sagen, dass system.web Assembly nicht in .net Framework 4 – Arash

+12

Die schlechteste Lösung! Was ist, wenn wir Business-Layer-Klassen aus dem HTTP-Kontext heraus verwenden müssen? –

+4

Hier ist die richtige Antwort http://stackoverflow.com/questions/12294458/asp-net-mvc-4-use-server-mappath-in-business-layer –

7

sollten Sie System.Web verweisen und rufen:

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

Vielleicht könnten abstrakt Sie dies als eine Abhängigkeit und eine IVirtualPathResolver erstellen. Auf diese Weise wären Ihre Serviceklassen nicht an System.Web gebunden und Sie könnten eine andere Implementierung erstellen, wenn Sie Ihre Logik in einer anderen UI-Technologie wiederverwenden möchten.

16

Sie können den Basispfad mithilfe des folgenden Codes abrufen und den erforderlichen Pfad damit verbinden.

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

HostingEnvironment.MapPath

System.Web.Hosting.HostingEnvironment.MapPath (path);

0

Architektonisch sollte System.web nicht in Business-Logik-Ebene (BLL) verwiesen werden. Wenden Sie BLL in die Lösungsstruktur an, um dem Prinzip der getrennten Interessen zu folgen, so verweisen Sie auf System.Web ist eine schlechte Übung. BLL sollte nicht im Asp.net-Kontext geladen/ausgeführt werden. Aus dem Grund sollten Sie die Verwendung von System.AppDomain.CurrentDomain.BaseDirectory statt System.Web.HttpContext.Current.Server.MapPath