Ich möchte den aktuellen Domainnamen in asp.net c # erhalten.
Ich benutze diesen Code.
string DomainName = HttpContext.Current.Request.Url.Host;
Meine URL lautet localhost:5858
aber nur localhost
.
Jetzt verwende ich mein Projekt in localhost. Ich möchte localhost bekommen: 5858.
Ein anderes Beispiel, wenn ich diese Domain verwende
www.somedomainname.com
ich möchte bekommen somedomainname.com
Bitte geben Sie mir eine Idee, wie Sie den aktuellen Domainnamen erhalten.
Antworten:
Die Verwendung
Request.Url.Host
ist angemessen - auf diese Weise rufen Sie den Wert des HTTP-Host:
Headers ab, der angibt, welchen Hostnamen (Domänennamen) der UA (Browser) wünscht, da der Ressourcenpfadteil der HTTP-Anforderung den Hostnamen nicht enthält.Beachten Sie, dass
localhost:5858
es sich nicht um einen Domänennamen handelt, sondern um einen Endpunktspezifizierer, der auch als "Berechtigung" bezeichnet wird und den Hostnamen und die TCP-Portnummer enthält. Dies wird durch Zugriff abgerufenRequest.Uri.Authority
.Darüber hinaus ist es nicht gültig zu bekommen
somedomain.com
aus ,www.somedomain.com
weil ein Webserver einen anderen Standort konfiguriert werden könnte , dienen ,www.somedomain.com
um im Vergleichsomedomain.com
, aber wenn Sie sind sicher , dass dies in Ihrem Fall gültig ist , dann werden Sie manuell die Hostnamen analysieren müssen, obwohl mitString.Split('.')
Werken in eine Prise.Beachten Sie, dass sich die Webserverkonfiguration (IIS) von der Konfiguration von ASP.NET unterscheidet und dass ASP.NET die HTTP-Bindungskonfiguration der Websites und Webanwendungen, unter denen es ausgeführt wird, überhaupt nicht kennt. Die Tatsache, dass sowohl IIS als auch ASP.NET dieselben Konfigurationsdateien (
web.config
) verwenden, ist ein roter Hering.quelle
Versuchen Sie, den "linken Teil" der URL wie folgt abzurufen:
string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
Dies gibt Ihnen entweder
http://localhost:5858
oderhttps://www.somedomainname.com
ob Sie vor Ort oder in der Produktion sind. Wenn Sie daswww
Teil löschen möchten , sollten Sie IIS dafür konfigurieren, aber das ist ein anderes Thema.Beachten Sie, dass die resultierende URL keinen abschließenden Schrägstrich enthält.
quelle
http://localhost:60333
Hier ist ein Screenshot
Request.RequestUri
und alle seine Eigenschaften als Referenz für alle.quelle
Sie können den folgenden Code ausprobieren:
Request.Url.Host + (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)
quelle
www.somedomain.com
ist die Domain / der Host. Die Subdomain ist ein wichtiger Teil.www.
wird oft synonym mit nicht vorhanden verwendet, aber das muss in der Regel eingerichtet werden (auch wenn es standardmäßig festgelegt ist), da sie nicht gleichwertig sind. Denken Sie an eine andere Subdomain wiemx.
. Das hat wahrscheinlich ein anderes Ziel alswww.
.Angesichts dessen würde ich raten, so etwas nicht zu tun. Das heißt, da Sie fragen, stelle ich mir vor, Sie haben einen guten Grund.
Persönlich würde ich dafür ein spezielles Gehäuse vorschlagen
www.
.string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);; if (host.StartsWith("www.")) return host.Substring(4); else return host;
Andernfalls benötigen Sie etwas Komplizierteres , wenn Sie wirklich zu 100% sicher sind, dass Sie eine Subdomain abschneiden möchten .
string host = ...; int lastDot = host.LastIndexOf('.'); int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.'); if (secondToLastDot > -1) return host.Substring(secondToLastDot + 1); else return host;
Den Hafen zu bekommen ist genau wie andere Leute gesagt haben.
quelle
HttpContext.Current.Request.Url.Host gibt die richtigen Werte zurück. Wenn Sie es auf www.somedomainname.com ausführen, erhalten Sie www.somedomainname.com. Wenn Sie auch den 5858 erhalten möchten, müssen Sie ihn verwenden
quelle
Das
Request.ServerVariables
Objekt funktioniert für mich. Ich kenne keinen Grund, es nicht zu benutzen.ServerVariables["SERVER_NAME"]
undServerVariables["HTTP_URL"]
sollte bekommen, wonach Sie suchenquelle
Sie können den folgenden Code ausprobieren, um einen vollständig qualifizierten Domainnamen zu erhalten:
quelle
Hier ist eine schnelle und einfache Möglichkeit, den Namen der URL abzurufen.
var urlHost = HttpContext.Current.Request.Url.Host; var xUrlHost = urlHost.Split('.'); foreach(var thing in xUrlHost) { if(thing != "www" && thing != "com") { urlHost = thing; } }
quelle
Versuche dies:
@ Request.Url.GetLeftPart (UriPartial.Authority)
quelle
So erhalten Sie die Basis-URL in MVC auch mit Subdomain
www.somedomain.com/subdomain
:var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";
quelle