web-dev-qa-db-fra.com

Comment obtenir le chemin virtuel complet d'une application ASP.NET

Comment connaître le chemin virtuel complet dans lequel mon application est actuellement hébergée? Par exemple:

http://www.mysite.com/myApp

ou

http://www.mysite.com/myApp/mySubApp

Je connais le chemin de l'application de HttpRequest mais il ne renvoie que le nom du dossier dans lequel mon application est actuellement hébergée, mais comment obtenir la partie initiale?

33
user115195

La partie du nom de domaine du chemin d'accès n'est pas vraiment une propriété de l'application elle-même, mais dépend de l'URL demandeuse. Vous pourrez peut-être accéder à un seul site Web à partir de nombreux noms d'hôte différents. Pour obtenir le nom de domaine associé à requête actuelle, ainsi que le chemin virtuel de l'application actuelle, vous pouvez faire:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

Techniquement, une "application" est un répertoire virtuel défini dans IIS et Request.ApplicationPath renvoie exactement cela. Si vous voulez obtenir le dossier dans lequel la --- request courante est gérée, vous pouvez le faire:

VirtualPathUtility.GetDirectory(Request.Path)

ASP.NET ne sait pas comment distinguer votre sous-application d'une application plus volumineuse si elle n'est pas définie comme un répertoire virtuel dans IIS. Sans enregistrement dans IIS, il voit simplement le tout comme une seule application.

73
Mehrdad Afshari
Request.Url

il contient plusieurs points que vous pourriez envisager d'utiliser, voir l'image ci-dessous:

enter image description here

18
balexandre

Dans .NET 4.5

    VirtualPathUtility.ToAppRelative(path)
6
Adamy

Le code ci-dessous résoudra le but, mais vous devez faire un peu de réglage pour deux types de scénarios:

  1. Hébergé en tant qu'application Web distincte.
  2. Hébergé en tant qu'application virtuelle dans une application Web.

    HttpContext.Current.Request.Url.GetLeftPart (UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;

4
Rhonald Moses

Essayez ceci (je ne l'ai pas essayé)

public string GetVirtualPath(string physicalPath)
{
string rootpath = Server.MapPath("~/");
physicalPath = physicalPath.Replace(rootpath, "");
physicalPath = physicalPath.Replace("\\", "/");
return "~/" + physicalPath;
}

Lien 1

Lien 2

2
Shoban

Url.Content("~") a très bien fonctionné pour moi et est agréable et simple. Je l'ai utilisé dans la vue comme ceci:

<a href="@(Url.Content("~" + attachment))">

Ici, mon attachment est un chemin comme "/ Content/Documents/Blah.PDF" .

Lorsque mon application est publiée sur un site IIS qui utilise un répertoire virtuel, Url.Content("~") se résout simplement au nom du répertoire virtuel comme, "/app-test ", par exemple.

0
Jess