it-swarm.com.de

Wie bekomme ich die Basis der Site?

Ich möchte eine kleine Hilfsmethode schreiben, die die Basis-URL der Site zurückgibt. Das habe ich mir ausgedacht:

public static string GetSiteUrl()
{
    string url = string.Empty;
    HttpRequest request = HttpContext.Current.Request;

    if (request.IsSecureConnection)
        url = "https://";
    else
        url = "http://";

    url += request["HTTP_Host"] + "/";

    return url;
}

Gibt es einen Fehler, den Sie sich vorstellen können? Kann jemand dies verbessern?

173
Jaggu

Versuche dies:

string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + 
    Request.ApplicationPath.TrimEnd('/') + "/";
312
Frank Allenby
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)

Das ist es ;)

165
Warlock

Die beliebte Lösung GetLeftPart wird in der PCL-Version von Uri leider nicht unterstützt. GetComponents ist jedoch, wenn Sie Portabilität benötigen, sollte dies der Trick sein:

uri.GetComponents(
    UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);
8
Todd Menier

Ich glaube, dass die obigen Antworten nicht berücksichtigen, wenn sich die Website nicht im Stammverzeichnis der Website befindet.

Dies ist ein WebApi-Controller:

string baseUrl = (Url.Request.RequestUri.GetComponents(
                    UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                 + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
6
rufo

Für mich scheint @ warlock die bisher beste Antwort zu sein, aber ich habe sie in der Vergangenheit immer verwendet.

string baseUrl = Request.Url.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.UriEscaped)   

Oder in einem WebAPI-Controller;

string baseUrl = Url.Request.RequestUri.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.Unescaped)

dies ist praktisch, damit Sie das gewünschte Escape-Format auswählen können. Ich bin mir nicht sicher, warum es zwei derart unterschiedliche Implementierungen gibt, und soweit ich das beurteilen kann, geben diese Methode und @ warlocks in diesem Fall genau dasselbe Ergebnis zurück, aber es sieht so aus, als würde GetLeftPart() auch funktionieren Nicht-Server-Uris wie mailto Tags zum Beispiel.

6
cirrus

Ich gehe mit

HttpContext.Current.Request.ServerVariables["HTTP_Host"]
5
Talha

Dies ist eine viel narrensichere Methode.

VirtualPathUtility.ToAbsolute("~/");
4
Daniel A. White

Basierend auf dem, was Warlock geschrieben hat, stellte ich fest, dass der virtuelle Pfad root benötigt wird, wenn Sie nicht im Stammverzeichnis Ihres Webs gehostet werden. (Dies funktioniert für MVC Web API-Controller.)

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) 
+ Configuration.VirtualPathRoot;
4
SpazDude

Ich verwende folgenden Code von Application_Start

String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);

1
Crispijn Lange

Das funktioniert bei mir.

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
  • Request.Url.OriginalString: Liefert den vollständigen Pfad wie im Browser.
  • Request.Url.PathAndQuery: Geben Sie den (vollständigen Pfad) Domänenname + PORT) zurück.
  • --- (Request.ApplicationPath: Auf dem gehosteten Server "/" und auf dem lokalen Server "application name" IIS deploy.

Wenn Sie auf Ihren Domain-Namen zugreifen möchten, sollten Sie den Anwendungsnamen in folgenden Fällen angeben:

  1. IIS-Bereitstellung
  2. Wenn Ihre Anwendung in der Unterdomäne bereitgestellt wurde.
1
FAHID
 string baseURL = HttpContext.Request.Url.Host;
0
shebin c babu

Bitte verwenden Sie den folgenden Code

string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);
0
Pranav Joseph