如何在ASP.NET / C#中检查URL的顶级域?

时间:2010-09-13 06:24:11

标签: c# asp.net url

让我们说“www.mysite.fr/home”是网址..现在如何从中获取“fr”?只是“fr”

实际上我想要做的是在检测到访问者的国家/地区之后在运行时更改主页。是的,我可以使用countryCode变量,这是其他类中的那个但是thot可能是我可以这样做只是..只是想试试..逻辑主要是: -

if(its "fr")
{
//apply masterpage 1
}


if(its "in")
{
//apply masterpage 2
}

有可能吗?无论如何,这将是正确的方式?将包含CountryCode变量的类作为实用程序类,并在我的新类中使用该变量

OR

从URL中获取此值“fr”或“in”?我该怎么做呢 ?有可能吗?

5 个答案:

答案 0 :(得分:6)

 if (Request.Url.Host.ToLower().EndsWith(".fr"))
  {
    ...
  }

答案 1 :(得分:3)

没有直接使用的方法。也许你自己可以写一个扩展名:

public static string GetDomainTypeName(this Uri uri)
{
  if (!uri.HostNameType.Equals(UriHostNameType.Dns) || uri.IsLoopback)
     return string.Empty; // or throw an exception
  return uri.Host.Split('.').Last();
}

小心案例! WWW.GOOGLE.FR可能会使您的代码不正确。

答案 2 :(得分:1)

我认为这应该是可能的。 您可以使用正则表达式获取代码(fr,等等)并更改母版页,但您必须在page_load之前执行此操作。当asp.net到达page_load时,主页面已经设置好(如果我没记错的话)。 您需要处理PreInit事件并设置您要设置的母版页。所以基本上在PreInit事件中更改所有正则表达式和母版页,你就可以了:)

以下是PreInit的描述(来源:http://msdn.microsoft.com/en-us/library/ms178472.aspx):

<强> PreInit 在开始阶段完成之后和初始化阶段开始之前引发。

将此事件用于以下事项:

•检查IsPostBack属性以确定这是否是第一次处理页面。此时也设置了IsCallback和IsCrossPagePostBack属性。

•创建或重新创建动态控件。

•动态设置母版页。

•动态设置Theme属性。

•读取或设置配置文件属性值。

答案 3 :(得分:0)

对于当前场景,您可以尝试使用以下代码段:

string url = "www.mysite.fr/home";
            int nStrLength = url.Length;
            int nDot = url.LastIndexOf(".")+1;

            int nRestStringLngth = nStrLength - nDot;

            string baseDomain = url.Substring(nDot, nRestStringLngth);
            int nSlash = baseDomain.IndexOf("/");
            baseDomain = baseDomain.Substring(0, nSlash);
            Console.WriteLine(baseDomain);

答案 4 :(得分:0)

在法国,它与EndsWith .fr合作但在英格兰你有.co.uk或奥地利你有.co.at和.at

您可以使用以下nuget包。 (安装包Nager.PublicSuffix) https://www.nuget.org/packages/Nager.PublicSuffix/

示例:

 var domainParser = new DomainParser();
 var data = await domainParser.LoadDataAsync();
 var tldRules = domainParser.ParseRules(data);
 domainParser.AddRules(tldRules);

 var domainName = domainParser.Get("sub.test.co.uk");
 //domainName.Domain = "test";
 //domainName.Hostname = "sub.test.co.uk";
 //domainName.RegistrableDomain = "test.co.uk";
 //domainName.SubDomain = "sub";
 //domainName.TLD = "co.uk";