Powiedzmy, że hostuję witrynę pod adresem http://www.foobar.com .
Czy istnieje sposób, w jaki mogę programowo sprawdzić „ http://www.foobar.com/ ” w moim kodzie (tj. Bez konieczności kodowania go na stałe w mojej konfiguracji internetowej)?
Powiedzmy, że hostuję witrynę pod adresem http://www.foobar.com .
Czy istnieje sposób, w jaki mogę programowo sprawdzić „ http://www.foobar.com/ ” w moim kodzie (tj. Bez konieczności kodowania go na stałe w mojej konfiguracji internetowej)?
Odpowiedzi:
HttpContext.Current.Request.Url może uzyskać wszystkie informacje dotyczące adresu URL. I może rozbić adres URL na jego fragmenty.
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
Metoda GetLeftPart zwraca ciąg zawierający skrajną lewą część ciągu identyfikatora URI, kończący się częścią określoną przez część.
Schemat i segmenty uprawnień identyfikatora URI.
Dla każdego, kto wciąż się zastanawia, pełniejsza odpowiedź jest dostępna pod adresem 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
na (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")
lub użyć odpowiedzi poniżej
Jeśli przykładowy adres URL to http://www.foobar.com/Page1
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"
.Host
o "http://www.foobar.com/Page1"
to www.foobar.com
, nie foobar.com
.
Aby uzyskać cały ciąg adresu URL żądania:
HttpContext.Current.Request.Url
Aby uzyskać część dotyczącą www.foo.com żądania:
HttpContext.Current.Request.Url.Host
Zauważ, że do pewnego stopnia jesteś zdany na łaskę czynników spoza aplikacji ASP.NET. Jeśli usługi IIS są skonfigurowane tak, aby akceptować wiele lub dowolny nagłówek hosta dla aplikacji, każda z tych domen, które zostały rozpoznane przez Twoją aplikację za pośrednictwem DNS, może zostać wyświetlona jako adres URL żądania, w zależności od tego, którą z nich wprowadził użytkownik.
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;
host.com => return host.com
s.host.com => return host.com
host.co.uk => return host.co.uk
www.host.co.uk => return host.co.uk
s1.www.host.co.uk => return host.co.uk
Wiem, że to jest starsze, ale teraz należy to zrobić
string Domain = HttpContext.Current.Request.Url.Authority
W ten sposób uzyskasz adres DNS lub IP z portem dla serwera.
Działa to również:
string url = HttpContext.Request.Url.Authority;
Przykład C # poniżej:
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;
}
Request
obiektu.