Angenommen, ich hoste eine Website unter http://www.foobar.com .
Gibt es eine Möglichkeit, programmgesteuert " http://www.foobar.com/ " in meinem Code dahinter zu ermitteln (dh ohne es in meiner Webkonfiguration fest codieren zu müssen)?
Angenommen, ich hoste eine Website unter http://www.foobar.com .
Gibt es eine Möglichkeit, programmgesteuert " http://www.foobar.com/ " in meinem Code dahinter zu ermitteln (dh ohne es in meiner Webkonfiguration fest codieren zu müssen)?
Antworten:
Mit HttpContext.Current.Request.Url können Sie alle Informationen zur URL abrufen . Und kann die URL in ihre Fragmente zerlegen.
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
Die GetLeftPart-Methode gibt eine Zeichenfolge zurück, die den am weitesten links stehenden Teil der URI-Zeichenfolge enthält und mit dem durch part angegebenen Teil endet.
Die Schema- und Berechtigungssegmente der URI.
Für alle, die sich noch fragen, finden Sie eine vollständigere Antwort unter http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/ .
public string FullyQualifiedApplicationPath
{
get
{
//Return variable declaration
var appPath = string.Empty;
//Getting the current context of HTTP request
var context = HttpContext.Current;
//Checking the current context content
if (context != null)
{
//Formatting the fully qualified website url/name
appPath = string.Format("{0}://{1}{2}{3}",
context.Request.Url.Scheme,
context.Request.Url.Host,
context.Request.Url.Port == 80
? string.Empty
: ":" + context.Request.Url.Port,
context.Request.ApplicationPath);
}
if (!appPath.EndsWith("/"))
appPath += "/";
return appPath;
}
}
context.Request.Url.Port == 80 durch (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")oder Verwendung Antwort unten
Wenn Beispiel-URL http://www.foobar.com/Page1 ist
HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"
HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"
HttpContext.Current.Request.Url.Scheme; //returns "http/https"
HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"
.Hostvon "http://www.foobar.com/Page1"ist www.foobar.comnicht foobar.com.
So erhalten Sie die gesamte Anforderungs-URL-Zeichenfolge:
HttpContext.Current.Request.Url
So erhalten Sie den Teil www.foo.com der Anfrage:
HttpContext.Current.Request.Url.Host
Beachten Sie, dass Sie bis zu einem gewissen Grad Faktoren außerhalb Ihrer ASP.NET-Anwendung ausgeliefert sind. Wenn IIS so konfiguriert ist, dass mehrere oder beliebige Host-Header für Ihre Anwendung akzeptiert werden, wird möglicherweise jede der Domänen, die über DNS in Ihre Anwendung aufgelöst wurden, als Anforderungs-URL angezeigt, je nachdem, welche vom Benutzer eingegeben wurde.
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;
host.com => host.com zurückgeben
s.host.com => host.com zurückgeben
host.co.uk => return host.co.uk
www.host.co.uk => return host.co.uk
s1.www.host.co.uk => return host.co.uk
Ich weiß, dass dies älter ist, aber der richtige Weg, dies jetzt zu tun, ist
string Domain = HttpContext.Current.Request.Url.Authority
Dadurch wird die DNS- oder IP-Adresse mit Port für einen Server abgerufen.
Das funktioniert auch:
string url = HttpContext.Request.Url.Authority;
C # Beispiel unten:
string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
cookieDomain = domainReg.Match(host).Groups[1].Value;
}
RequestObjekt zu schauen .