1
我使用的是Url.RouteUrl("My_Route", new RouteValueDictionary(new { some = "value" }),"http","hostname")
,現在我需要從url獲取主機名稱,但只需獲取頂級域名。例如,我正在使用ui.foo.local運行我的網站,我需要將網址路由到foo.local。有沒有建立在mvc或c#中這樣做的方式?獲取頂級域名
我使用的是Url.RouteUrl("My_Route", new RouteValueDictionary(new { some = "value" }),"http","hostname")
,現在我需要從url獲取主機名稱,但只需獲取頂級域名。例如,我正在使用ui.foo.local運行我的網站,我需要將網址路由到foo.local。有沒有建立在mvc或c#中這樣做的方式?獲取頂級域名
我有這個問題,並寫了一個域Url拆分類,因爲我找不到任何簡單的方法來做到這一點。沒有花太長時間,很高興得到一些反饋。您可以使用這樣的:
var splitter = new DomainSplitter("http://stackoverflow.com");
var domain = splitter.DomainPart;
類是在這裏:
public class DomainSplitter {
public string DomainPart { get; private set; }
public string SubDomainPart { get; private set; }
public string SchemePart { get; private set; }
public string QueryPart { get; private set; }
public DomainSplitter(string url) {
if (string.IsNullOrEmpty(url)) {
throw new Exception("urlString or expected sub domain were null or empty");
}
if (url.Contains("://")) {
ShemePart = url.Split(':')[0] + "://";
url = url.Remove(0, FirstPart.Length);
}
var endOfDomainIndex = url.IndexOfAny("?/".ToCharArray());
if (endOfDomainIndex == -1) {
endOfDomainIndex = url.Length;
}
int startOfDomainIndex;
var domainStub = url.Substring(0, endOfDomainIndex);
var noOfDots = domainStub.Length - domainStub.Replace(".", "").Length;
switch (noOfDots) {
case 0:
startOfDomainIndex = 0;
break;
case 1:
startOfDomainIndex = 0;
if (url.Contains("localhost")) {
startOfDomainIndex = url.IndexOf(".") + 1;
}
break;
default:
startOfDomainIndex = url.IndexOf(".") + 1;
break;
}
if (url.Contains("?")) {
QueryPart = "?" + url.Split('?')[1];
}
else {
QueryPart = "";
}
SubDomainPart = startOfDomainIndex > 0 ? url.Substring(0, startOfDomainIndex - 1) : "";
DomainPart = url.Substring(startOfDomainIndex, endOfDomainIndex - startOfDomainIndex);
}
}
您可以通過使用[URI](http://msdn.microsoft.com/en-us/library/使這個簡單system.uri.aspx)而不是字符串。 – jrummell
你的代碼做了什麼'Uri'不能做什麼? –
我找不到使用Uri處理子域的簡單方法......也許有人可以啓發我。 –