Comment puis-je utiliser la méthode server.mappath dans une classe de bibliothèque de classe C #, qui agit comme mon BusinessLayer pour mon site Web ASP.NET
En l'appelant?
var path = System.Web.HttpContext.Current.Server.MapPath("default.aspx");
Assurez-vous d'ajouter une référence à l'assembly System.Web.
Vous pouvez obtenir le chemin de base en utilisant le code suivant et y ajouter le chemin dont vous avez besoin.
string path = System.AppDomain.CurrentDomain.BaseDirectory;
Vous devez référencer System.Web et appeler:
HttpContext.Current.Server.MapPath(...)
Utilisez ceci System.Web.Hosting.HostingEnvironment.MapPath () .
HostingEnvironment.MapPath("~/file")
Je me demande pourquoi personne ne l'a mentionné ici.
Vous pouvez peut-être résumer cela comme une dépendance et créer un IVirtualPathResolver. De cette façon, vos classes de service ne seraient pas liées à System.Web et vous pourriez créer une autre implémentation si vous vouliez réutiliser votre logique dans une technologie d'interface utilisateur différente.
HostingEnvironment.MapPath
System.Web.Hosting.HostingEnvironment.MapPath(path);
Sur le plan architectural, System.web ne doit pas être référencé dans Business Logic Layer (BLL). Utilisez BLL dans la structure de la solution pour suivre le principe séparé de préoccupation, donc reportez-vous à System.Web est une mauvaise pratique. BLL ne doit pas charger/exécuter dans le contexte Asp.net. Pour la raison que vous devriez envisager d'utiliser System.AppDomain.CurrentDomain.BaseDirectory
au lieu de System.Web.HttpContext.Current.Server.MapPath