让我们说“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”?我该怎么做呢 ?有可能吗?
答案 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";