web-dev-qa-db-fra.com

Server.Mappath dans la bibliothèque de classes C #

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

54
Shyju

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.

117
Aaron Powell

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(...)
7
Philippe Leybaert

Utilisez ceci System.Web.Hosting.HostingEnvironment.MapPath () .

HostingEnvironment.MapPath("~/file")

Je me demande pourquoi personne ne l'a mentionné ici.

4
Mahmoodvcs

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.

4
Tom Miller
HostingEnvironment.MapPath
System.Web.Hosting.HostingEnvironment.MapPath(path);
2
Sachin Panchal

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

1
CodeSi