如何使用VB.NET从完整的URL中提取网站主机名?

时间:2010-11-11 09:42:15

标签: asp.net vb.net

我从当前用户那里得到ReffererUrl,如果refferer存在,我需要从中提取没有.com / .co.uk ....等值的主机名。因此,如果ReffererUrl是http://main.something.biz/sup.aspx?r=e3432r3,我想得到“某事”。

无论是Regex还是别的什么都没关系。

感谢...

4 个答案:

答案 0 :(得分:2)

注意:它仅适用于您的规范:您可以通过在代码末尾添加更多条件来扩展它。但是我会说当路径像“abc.ss33.video.somthing.co.us”

时它不会起作用
 Uri u = new Uri("http://main.something.biz/sup.aspx?r=e3432r3");
            string a = u.DnsSafeHost;
            string[] arr1 = a.Split('.');
            string somethinVar = String.Empty;

            if (arr1.Length == 3)
                somethinVar = arr1[1];

答案 1 :(得分:0)

在您描述的意义上没有内置的方法来执行此操作,因为IIS和ASP.NET都不知道主机名和域名之间的区别。

你必须编写一些代码才能做到这一点。

一个例子可能是:

string hostName=ReffererUrl.split('.')[1];

此代码仅在ReffererUrl看起来像您发布的那个时才有效,并且您必须确保split函数返回一个数组大于1的数组

答案 2 :(得分:0)

HttpContext.Current.Request.ServerVariables("HTTP_HOST")

答案 3 :(得分:0)

使用子域提取域(如果存在): -

Public Function ExtractSubAndMainDomainFromURL(URL As String) As String
    '
    ' cut-off any url encoded data
    URL = URL.Split("?"c)(0)
    'return array of segments between slashes
    Dim URLparts() As String = URL.Split("/"c)
    'find first segment with periods/full-stops
    Dim Domain As String = Array.Find(URLparts, Function(x) (x.Contains(".")))
    'check if nothing returned - if necessary
    If IsNothing(Domain) Then Domain = String.Empty 


    Return Domain

End Function