2009-05-31 12 views
31

Come si conosce il percorso virtuale completo in cui è attualmente ospitata la mia applicazione? Per esempio:Come ottenere il percorso virtuale completo di un'applicazione ASP.NET

http://www.mysite.com/myApp 

o

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

So che il percorso dell'applicazione di HttpRequest ma restituisce solo il nome della cartella che la mia domanda è attualmente ospitato, ma come faccio ad avere la parte iniziale?

risposta

71

La parte del nome di dominio del percorso non è realmente una proprietà dell'applicazione stessa, ma dipende dall'URL richiedente. Potrebbe essere possibile raggiungere un singolo sito Web da molti nomi host diversi. Per ottenere il nome di dominio associato al richiesta corrente, insieme con il percorso virtuale dell'applicazione corrente, si potrebbe fare:

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

Tecnicamente, un ' "applicazione" è una directory virtuale definito in IIS e Request.ApplicationPath rendimenti esattamente quello Se si desidera ottenere la cartella in cui la corrente richiesta viene gestita, si può fare questo:

VirtualPathUtility.GetDirectory(Request.Path) 

ASP.NET non ha idea di come distinguere il vostro sub-applicazioni da un'applicazione più grande se non è definito come una directory virtuale in IIS. Senza la registrazione in IIS, vede l'intera cosa come una singola app.

+2

E se l'applicazione è una directory virtuale in IIS, ma la pagina che stiamo richiesto si trova all'interno della cartella diversi, ma vogliamo percorso tra cui directory virtuale, ma non le cartelle, come fare questo ? – Krunal

+1

@Krunal [HttpRuntime.AppDomainAppVirtualPath] (https://msdn.microsoft.com/en-us/library/system.web.httpruntime.appdomainappvirtualpath (v = vs.110) .aspx) o Request.ApplicationPath – jproch

2

provare questo (non ho provato)

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

Link 1

Link 2

1

Per rispondere pienamente a questa domanda penso che è necessario per descrivere ciò che il vostro in realtà cercando di fare e che cosa è rendendo il valore del tuo percorso "sconosciuto"

Di solito quando mi imbatto in Path che trova problemi questo post sul blog di Rick Strahl cle per me: http://www.west-wind.com/weblog/posts/269.aspx

Potrebbe essere necessario combinare per ottenere quello che vuoi.

+0

Il collegamento è interrotto –

18
Request.Url 

esso contiene diversi punti che si potrebbe prendere in considerazione di utilizzare, vedere l'immagine qui sotto:

enter image description here

3

Il codice seguente risolverà lo scopo, tuttavia bisogna fare un tuning po 'per due tipi di scenari:

  1. Ospitato come applicazione Web separata.
  2. Ospitato come applicazione virtuale all'interno di un'applicazione Web.

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

6

In .NET 4.5

VirtualPathUtility.ToAppRelative(path) 
Problemi correlati