Domanda

Come posso ottenere costantemente assoluto, completo di root o url di base del sito, indipendentemente dal fatto che il sito è in una directory virtuale e indipendentemente da dove il mio codice è nella struttura di directory?Ho provato ogni variabile e la funzione che posso pensare e che non hanno trovato un buon modo.

Voglio essere in grado di ottenere l'url del sito corrente, cioè http://www.example.com o se è una directory virtuale, http://www.example.com/DNN/


Ecco alcune delle cose che ho provato e il risultato.L'unico che comprende l'intero pezzo che voglio (http://localhost:4471/DNN441) è Richiesta.URI.AbsoluteURI:

  • Richiesta.PhysicalPath:C:\WebSites\DNN441\Default.aspx
  • Richiesta.ApplicationPath:/DNN441
  • Richiesta.PhysicalApplicationPath:C:\WebSites\DNN441\
  • MapPath:C:\WebSites\DNN441\DesktopModules\Articles emplates\Default.aspx
  • RawURL:/DNN441/ModuleTesting/Articoli/tabid/56/ctl/Dettagli/mid/374/ItemID/1/Default.aspx
  • Richiesta.Url.AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
  • Richiesta.Url.AbsolutePath:/DNN441/Default.aspx
  • Richiesta.Url.LocalPath:/DNN441/Default.aspx Richiesta.Url.Host:localhost
  • Richiesta.Url.PathAndQuery:/DNN441/Default.aspx?TabId=56&ctl=Details&mid=374&ItemID=1
È stato utile?

Soluzione

Nella lettura della risposta fornita in Rick Strahl Blog ho trovato ciò di cui ho davvero bisogno è stato abbastanza semplice.Prima di tutto bisogna determinare il percorso relativo (che per me è stata la parte più facile), e si passa alla funzione definita di seguito:

VB.NET

Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
   Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
   Return Result.ToString
End Function

C#

public static string GetFullyQualifiedURL(string s) {
    Uri Result = new Uri(HttpContext.Current.Request.Url, s);
    return Result.ToString();
}

Altri suggerimenti

Accettato risposta si assume che la corrente richiesta è già il server virtuale/root.Prova questo:

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

C'è qualche discussione eccellente e idee Rick Strahl blog

EDIT:Devo aggiungere che le idee di lavoro, con o senza un valido HttpContext.

EDIT2:Ecco il commento specifico / codice il post che risponde alla domanda

Trovato questo codice qui:

string appPath = null;

appPath = string.Format("{0}://{1}{2}{3}",
    Request.Url.Scheme,
    Request.Url.Host,
    Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
    Request.ApplicationPath);

Hai provato AppSettings.RootUrl che di solito è configurato in web.file di configurazione?

Stai parlando per l'uso come link?

se è così, allora si fa questo <a href='/'>goes to root</a> prendete il file di default della directory principale del sito web.

Ora, per il lato client, di fare, di passare "~/" per il Controllo::ResolveUrl metodo di fornire quello che stai cercando.(http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)

Non ho alcun modo per convalidare questo, al momento, ma hai provato a "Richiesta.Url.AbsoluteUri" da un'altra macchina?

Essa si verifica a me che per quanto riguarda la tua macchina è in questione è il browser richiede da localhost.

Potrei sbagliarmi, ma penso che la richiesta è relativa al browser e non il webserver.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top