我需要根据当前网址正确获取域/子域。为了正确地从数据库中获取数据并进一步使用正确的参数调用Web api,这是必需的。
在垂直方面,我面临本地和生产网址的问题。对于前。
在本地,我有
http://sample.local.example.com
http://test.dev.example.com
在生产中,我有
http://client.example.com
http://program.live.example.com
我需要
Subdomain as: sample / test / client / program
Domain as: exmpale
到目前为止,我尝试使用带有以下代码的c#来识别同一代码。它在我的本地计算机上运行良好,但我相信这会在某个时间点对生产造成影响。基本上,对于Subdomain,请获取第一部分,对于Domain,请在“ .com”之前获取最后一部分
var host = Request.Url.Host;
var domains = host.Split('.');
var subDomain = domains[0];
string mainDomain = string.Empty;
#if DEBUG
mainDomain = domains[2];
#else
mainDomain = domains[1];
#endif
return Tuple.Create(mainDomain, subDomain);
答案 0 :(得分:4)
我认为Linq应该代替您的正则表达式。试试:
public static Tuple<string, string> GetDomains(Uri url)
{
var domains = url.Host.Substring(0, url.Host.LastIndexOf(".")).Split('.');
var subDomain = string.Join("/", domains.Take(domains.Length - 1));
var mainDomain = domains.Last();
return Tuple.Create(mainDomain, subDomain);
}
"http://program.live.example.com"
的输出
example
program/live
答案 1 :(得分:2)
此正则表达式应为您工作:
Match match = Regex.Match(temp, @"http://(\w+)\.?.*\.(\w+).com$");
string subdomain = match.Groups[1].Value;
string domain = match.Groups[2].Value;
http://(\w+)\.
在点http://
之后与1个或多个单词字符匹配为组1。
.*
匹配零个或多个出现的任何字符
\.(\w+).com
在.com
之前和点之后匹配1个或多个单词字符作为第2组
$
指定字符串的结尾
\.?
使点可选,以便在http://client.example.com
中的第1组和第2组之间不存在任何情况时
答案 2 :(得分:1)
您做对了,您可以将域名作为数组中的倒数第二个值
var host = Request.Url.Host;
var domains = host.Split('.');
string subDomain = domains[0].Split('/')[2];
string mainDomain = domains[domains.Length-2];
return Tuple.Create(mainDomain, subDomain);
,如果您需要所有子域,可以在此处放一个循环