Frage

Ich frage mich, was der beste Weg, um die aktuelle Domäne ist in ASP.NET zu erhalten?

Zum Beispiel:

http://www.domainname.com/subdir/ sollte a href Ausbeute <=“ http://www.domainname.com“rel = "noreferrer"> http://www.domainname.com http://www.sub.domainname.com/subdir/ sollte a href Ausbeute <= "http://sub.domainname.com" rel = "noreferrer"> http://sub.domainname.com

Als Richtwert soll ich in der Lage sein, eine URL wie „/Folder/Content/filename.html“ hinzuzufügen (etwa wie die durch Url.RouteUrl () in ASP.NET MVC) direkt auf die URL und es sollte funktionieren .

War es hilfreich?

Lösung

Die gleiche Antwort wie MattMitchell sind aber mit einigen Änderungen. Dieser prüft für den Standard-Port statt.

  

Edit: Aktualisiert Syntax und Verwendung von Request.Url.Authority wie vorgeschlagen

$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"

Andere Tipps

Wie pro Link einen guten Ausgangspunkt ist :

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 

Wenn jedoch die Domain http://www.domainname.com:500 dieses Willens scheitern.

So etwas wie die folgende ist verlockend, dies zu beheben:

int defaultPort = Request.IsSecureConnection ? 443 : 80;
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 
  + (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");

Allerdings Port 80 und 443 werden von der Konfiguration ab.

Als solches Sie IsDefaultPort wie im akzeptierte Antwort oben von Carlos Muñoz verwenden sollten.

Request.Url.GetLeftPart(UriPartial.Authority)

Dies ist Schema enthalten.

ACHTUNG! Für jeden, der verwendet Current.Request .Url.Host. Verstehen Sie, dass Sie arbeiten, basierend auf der aktuellen Anforderung und dass die aktuelle Anforderung wird nicht immer mit dem Server und können manchmal mit anderen Servern sein.

Also, wenn Sie diese in etwas verwenden wie, Application_BeginRequest () in der Datei Global.asax, dann 99,9% der Zeit wird es in Ordnung sein, aber 0,1% könnten Sie etwas anderes als Ihre eigenen Server Hostnamen bekommen.

Ein gutes Beispiel dafür ist etwas, was ich nicht schon längst entdeckt. Mein Server neigt http://proxyjudge1.proxyfire.net/fastenv von Zeit zu Zeit zu treffen. Application_BeginRequest () Griffe gerne diese Anfrage, wenn Sie Request.Url.Host rufen, wenn es diese Anforderung, dass Sie zurück proxyjudge1.proxyfire.net bekommen. Einige von euch vielleicht denken „no duh“, aber erwähnenswert, weil es ein sehr harter Fehler war zu bemerken, da sie nur 0,1% der Zeit passiert: P

Dieser Fehler hat mich gezwungen, meine Domain-Host als String in den Konfigurationsdateien einzufügen.

Warum nicht verwenden

Request.Url.Authority

Es gibt die ganze Domäne und den Hafen.

Sie müssen noch auf Figur http oder https

Einfach und kurz Art und Weise (es Unterstützung Schema, Domäne und Port):

Verwenden Request.GetFullDomain()

// Add this class to your project
public static class HttpRequestExtensions{
    public static string GetFullDomain(this HttpRequestBase request)
    {
        var uri= request?.UrlReferrer;
        if (uri== null)
            return string.Empty;
        return uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
    }
}

// Now Use it like this:
Request.GetFullDomain();
// Example output:    https://www.example.com:5031
// Example output:    http://www.example.com:5031
// Example output:    https://www.example.com

Eine andere Möglichkeit:


string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);

Wie wäre:

NameValueCollection vars = HttpContext.Current.Request.ServerVariables;
string protocol = vars["SERVER_PORT_SECURE"] == "1" ? "https://" : "http://";
string domain = vars["SERVER_NAME"];
string port = vars["SERVER_PORT"];

Mit UriBuilder:

    var relativePath = ""; // or whatever-path-you-want
    var uriBuilder = new UriBuilder
    {
        Host = Request.Url.Host,
        Path = relativePath,
        Scheme = Request.Url.Scheme
    };

    if (!Request.Url.IsDefaultPort)
        uriBuilder.Port = Request.Url.Port;

    var fullPathToUse = uriBuilder.ToString();

Wie wäre:

String domain = "http://" + Request.Url.Host
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top