2010-09-13 59 views
2

让我们说“www.mysite.fr/home”是网址..现在我该如何取出“fr”呢?只是“fr”如何检查ASP.NET/C#中URL的顶级域名?

实际上我想要做的是在检测到访问者的国家后在运行时更改masterpages ..是的,我可以使用countryCode变量,这是在其他一些类,但这可能是我可以做到这一点这只..想试试..逻辑基本上是: -

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


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

这可能吗?无论如何,什么是正确的方式?制作包含COUNTRYCODE变量作为一个工具类类和使用从那里变量在我的新类

OR

取这个值“FR”或“中”关网址?我该怎么做呢 ?可能吗?

+1

为什么这个问题得到了下来票。任何有效的理由? – Bala 2010-09-13 07:21:24

+0

@Bala:不是我能看到的......我投了票,为什么不呢? – mpen 2010-09-13 07:22:27

+0

增加了标记... – Bala 2010-09-13 07:23:36

回答

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

我有点困惑ABT什么“Request.Url.Host”返回...如果我的网址是www.mysite.fr/home/myAccount.aspx...is它会返回“www.mysite.fr”或完整的URL,即“www.mysite.fr/home/myAccount.aspx”??? – Serenity 2010-09-13 06:49:20

+0

它只会返回“www.mysite.fr” – 2010-09-13 06:50:58

+0

@Mark - 我认为你需要在检查前做出url的'ToUpper()'。 – 2010-09-13 07:02:53

1

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

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

PreInit 后引发开始阶段完成并且在初始化阶段开始之前。

使用此事件的以下内容:

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

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

•动态设置母版页。

•动态设置主题属性。

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

+0

是的..have包括在Page_PreInit里面这个逻辑只有因为MasterPageFile不起作用在页面加载..如果我是没有错......所以正则表达式..啊? lemme google..thnx – Serenity 2010-09-13 06:40:51

+0

如果您的URL保持不变,比如www.mysite.fr,www.mysite.in,www.mysite.us,那么您可以使用简单的字符串处理,但对于复杂的表达式,您可能需要使用正则表达式。它的字符串匹配:)爷爷 – 2010-09-13 06:47:10

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可能会使您的代码不正确。

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); 
0

在法国它的endsWith .FR工作,但在英格兰,你有.co.uk或在奥地利你有.co.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";