2012-09-10 137 views
1

我使用的是Url.RouteUrl("My_Route", new RouteValueDictionary(new { some = "value" }),"http","hostname"),現在我需要從url獲取主機名稱,但只需獲取頂級域名。例如,我正在使用ui.foo.local運行我的網站,我需要將網址路由到foo.local。有沒有建立在mvc或c#中這樣做的方式?獲取頂級域名

回答

1

我有這個問題,並寫了一個域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); 


    } 
} 
+0

您可以通過使用[URI](http://msdn.microsoft.com/en-us/library/使這個簡單system.uri.aspx)而不是字符串。 – jrummell

+0

你的代碼做了什麼'Uri'不能做什麼? –

+0

我找不到使用Uri處理子域的簡單方法......也許有人可以啓發我。 –