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?
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.
Request.Url
il contient plusieurs points que vous pourriez envisager d'utiliser, voir l'image ci-dessous:
Dans .NET 4.5
VirtualPathUtility.ToAppRelative(path)
Le code ci-dessous résoudra le but, mais vous devez faire un peu de réglage pour deux types de scénarios:
Hébergé en tant qu'application virtuelle dans une application Web.
HttpContext.Current.Request.Url.GetLeftPart (UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;
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.