2008-10-21 7 views

Antwort

2

Sie können es wie folgt tun:

string.Format("{0}://{1}:{2}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port) 

Und Sie werden das generic URI syntax <Protokoll> erhalten: // <Host>: <Port>

+0

Ich mag das, aber was ist, wenn Sie nicht den Port wollen, wenn der Port 80 .. ?? - String.Format ((Request.Url.Port! = 80)? "{0}: // {1}: {2}": "{0}: // {1}", Request.Url. Scheme, Request.Url.Host, Request.Url.Port) .... oder wird das brechen, weil es in einigen Fällen keine {2} gibt – stephenbayer

+0

Es funktioniert, nur getestet ... – stephenbayer

+0

Dies funktioniert nicht, wenn Sie App wird in einem virtuellen Verzeichnis bereitgestellt. –

1
System.Web.UI.Page.Request.Url 
+0

Dies wird dies die vollständige URL der Seite –

+0

Versuchen geben: Request.ServerVariables [ "SERVER_PORT_SECURE"] + Request.ServerVariables [ "SERVER_NAME"] + Request.ServerVariables [ "SERVER_PORT"] + Request.ApplicationPath; –

1
this.Request.Url.Host 
2

können Sie so etwas wie dieses verwenden.

System.Web.HttpContext.Current.Server.ResolveUrl("~/") 

Es wird dem Stamm der Anwendung zugeordnet. Wenn Sie sich jetzt in einem virtuellen Verzeichnis befinden, müssen Sie etwas mehr arbeiten.

bearbeiten

Old Posting enthielt falsche Methodenaufruf!

+0

, die den physischen Pfadnamen angibt, nicht genau das, wonach er gesucht hat. ok, naja ... überhaupt nicht. – stephenbayer

+0

Ups .... falsches Snippet jetzt behoben –

+0

cool .. besser .. :) – stephenbayer

2

Ich mag die Art und Weise CMS behandelt diese Fragen Sie das Beste, indem Sie das String.Format und die Page.Request-Variablen verwenden. Ich möchte es nur ein wenig verändern. Getestet habe ich es nur auf einer meiner Seiten, also, ich werde hier den Code kopieren:

String baseURL = string.Format(
    (Request.Url.Port != 80) ? "{0}://{1}:{2}" : "{0}://{1}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.Url.Port) 
0

Diese Methode verarbeitet http/https, Portnummern und Query-Strings.

0

Ich musste mich mit etwas Ähnlichem befassen, ich brauchte eine Möglichkeit, das Tag programmatisch so zu setzen, dass es auf meine Website root verweist.

Die akzeptierte Lösung funktionierte nicht für mich wegen localhost und virtuellen Verzeichnissen.

Also kam ich mit der folgenden Lösung, es funktioniert auf localhost mit oder ohne virtuelle Verzeichnisse und natürlich unter IIS Websites.

string.Format("{0}://{1}:{2}{3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, ResolveUrl("~") 
0

Kombination das Beste, was ich in dieser Frage gesehen habe bisher, nimmt diese eine Betreuung von:

  1. http und https
  2. Standard-Ports (80, 443) und Nicht-Standard
  3. Anwendung in einem Unterverzeichnis des Stamm gehosteten

    string url = String.Format(
        Request.Url.IsDefaultPort ? "{0}://{1}{3}" : "{0}://{1}:{2}{3}", 
        Request.Url.Scheme, Request.Url.Host, 
        Request.Url.Port, ResolveUrl("~/")); 
    
3

Wir Uri und seine baseUri Konstruktor verwenden:

  • new Uri(this.Request.Url, "/") für den Stamm der Website
  • new Uri(this.Request.Url, this.Request.ResolveUrl("~/")) für den Stamm der Website
1

ich diese Eigenschaft auf Seite nutzen Fälle zu behandeln virtuelle Verzeichnisse und Standard-Ports:

string FullApplicationPath { 
    get { 
     StringBuilder sb = new StringBuilder(); 
     sb.AppendFormat("{0}://{1}", Request.Url.Scheme, Request.Url.Host); 

     if (!Request.Url.IsDefaultPort) 
      sb.AppendFormat(":{0}", Request.Url.Port); 

     if (!string.Equals("/", Request.ApplicationPath)) 
      sb.Append(Request.ApplicationPath); 

     return sb.ToString(); 
    } 
} 
Verwandte Themen