Скажімо, я розміщую веб-сайт за адресою 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, закінчуючи частиною, вказаною частиною.
Схема та повноваження сегментів 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 => повернути host.co.uk
www.host.co.uk => повернути host.co.uk
s1.www.host.co.uk => повернути 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
об’єкт.