Wie kann ich die server.mappath Methode in einer # Klassenbibliothek Klasse C, die für meine ASP.NET-Website als meine BusinessLayer wirktServer.MapPath in C# classlibrary
Antwort
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.
sollten Sie System.Web verweisen und rufen:
HttpContext.Current.Server.MapPath(...)
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.
Sie können den Basispfad mithilfe des folgenden Codes abrufen und den erforderlichen Pfad damit verbinden.
string path = System.AppDomain.CurrentDomain.BaseDirectory;
Verwenden Sie diese System.Web.Hosting.HostingEnvironment.MapPath().
HostingEnvironment.MapPath("~/file")
Frage mich, warum niemand es hier erwähnte.
HostingEnvironment.MapPath
System.Web.Hosting.HostingEnvironment.MapPath (path);
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
in Betracht ziehen, ich sollte sagen, dass system.web Assembly nicht in .net Framework 4 – Arash
Die schlechteste Lösung! Was ist, wenn wir Business-Layer-Klassen aus dem HTTP-Kontext heraus verwenden müssen? –
Hier ist die richtige Antwort http://stackoverflow.com/questions/12294458/asp-net-mvc-4-use-server-mappath-in-business-layer –