Utilisation de Server.MapPath dans des classes C # externes dans ASP.NET

J’essaie d’obtenir le chemin absolu de certains fichiers dans une classe C #. Server.MapPath fonctionne bien évidemment pour ASPX et leurs pages code-behind, mais cela n’existe pas dans un autre fichier de classe. J’ai essayé HostingEnvironment.MapPath() , mais cela se plaint que le chemin virtuel relatif n’est pas autorisé. Des pensées?

System.Web est déjà importé.

    La classe ServerUtility est disponible en tant HttpContext dans votre HttpContext . Si vous vous trouvez dans un environnement où vous savez qu’il sera exécuté dans le pipeline ASP.Net, vous pouvez utiliser

     HttpContext.Current.Server.MapPath() 

    Cependant, vous devrez importer System.Web .

    vous pouvez aussi utiliser:

     var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt") 

    si

     var path = Server.MapPath("~/App_Data"); var fullpath = Path.Combine(path , "myfile.txt"); 

    est inaccessible

    Vous ne pouvez pas simplement append une référence à System.Web et vous pouvez utiliser Server.MapPath ?

    Modifier: aujourd’hui, je vous recommande d’utiliser la méthode HostingEnvironment.MapPath :

    C’est une méthode statique dans l’assembly System.Web qui mappe un chemin virtuel vers un chemin physique sur le serveur. Il ne nécessite pas de référence à HttpContext .

     System.Reflection.Assembly.GetAssembly(type).Location 

    SI le fichier que vous essayez d’obtenir est l’emplacement de l’assemblage pour un type. Mais si les fichiers sont relatifs à l’emplacement de l’assembly, vous pouvez l’utiliser avec l’espace de noms System.IO pour obtenir le chemin exact du fichier.

    Je l’utilise aussi:

     System.Web.HTTPContext.Current.Server.MapPath 
     class test { public static void useServerPath(ssortingng path) { if (File.Exists(path) { \\...... do whatever you wabt } else { \\..... } } 

    Maintenant, lorsque vous appelez la méthode depuis le codebehind

    par exemple :

     protected void BtAtualizacao_Click(object sender, EventArgs e) { ssortingng path = Server.MapPath("Folder") + "\\anifile.txt"; test.useServerPath(path); } 

    de cette façon, votre code est simple et avec une méthode, vous pouvez utiliser plusieurs chemins pour chaque appel 🙂

    Celui-ci m’a aidé

     //System.Web.HttpContext.Current.Server.MapPath // FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 

    Que vous utilisiez ou non ASP.NET, vous devriez pouvoir utiliser HostingEnvironment.ApplicationPhysicalPath

    Le server.mappath (“”) fonctionnera sur la page aspx, si vous voulez obtenir le chemin absolu depuis un fichier de classe, vous devez utiliser ceci –

     HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")