Допустим, я размещаю веб-сайт по адресу http://www.foobar.com .
Есть ли способ программно определить " http://www.foobar.com/ " в моем коде позади (т.е. без необходимости жестко кодировать его в моей веб-конфигурации)?
Допустим, я размещаю веб-сайт по адресу http://www.foobar.com .
Есть ли способ программно определить " http://www.foobar.com/ " в моем коде позади (т.е. без необходимости жестко кодировать его в моей веб-конфигурации)?
Ответы:
HttpContext.Current.Request.Url может предоставить вам всю информацию об URL-адресе. И может разбить url на фрагменты.
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
Метод GetLeftPart возвращает строку, содержащую крайнюю левую часть строки URI, заканчивающуюся частью, указанной параметром part.
Схема и сегменты полномочий URI.
Для тех, кому все еще интересно, более полный ответ доступен на 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
на (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")
или использовать ответ ниже
Если пример URL - 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
из "http://www.foobar.com/Page1"
есть www.foobar.com
, нет foobar.com
.
Чтобы получить всю строку URL-адреса запроса:
HttpContext.Current.Request.Url
Чтобы получить часть запроса www.foo.com:
HttpContext.Current.Request.Url.Host
Обратите внимание, что вы до некоторой степени зависите от факторов, не связанных с вашим приложением ASP.NET. Если IIS настроен для приема нескольких или любых заголовков хоста для вашего приложения, то любой из этих доменов, разрешенных для вашего приложения через DNS, может отображаться как URL-адрес запроса, в зависимости от того, какой из них ввел пользователь.
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;
host.com => вернуть host.com
s.host.com => вернуть 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
Я знаю, что это старше, но правильный способ сделать это сейчас -
string Domain = HttpContext.Current.Request.Url.Authority
Это получит DNS или IP-адрес с портом для сервера.
Это также работает:
строка url = HttpContext.Request.Url.Authority;
Пример C # ниже:
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
объекте.