【问题标题】:Get top level domain获取顶级域名
【发布时间】:2012-09-11 04:00:17
【问题描述】:

我正在使用Url.RouteUrl("My_Route", new RouteValueDictionary(new { some = "value" }),"http","hostname"),现在我需要从 url 获取主机名,但只是顶级域。例如,我正在使用 ui.foo.local 运行我的网站,并且我需要将 url 路由到 foo.local。在 mvc 或 c# 中有内置的方法吗?

【问题讨论】:

    标签: c# asp.net-mvc-3 url-routing


    【解决方案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);
    
    
        }
    }
    

    【讨论】:

    • 您可以使用Uri 代替字符串来简化此操作。
    • 我找不到使用 Uri 处理子域的简单方法...也许有人可以启发我。
    • @PaulGrimshaw 向 SO 提出问题 :)
    • 写的时候我在飞机上... ;-)
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2018-12-30
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多