我如何在c#中获得URL的一部分/子域
本文关键字:URL 一部分 子域 | 更新日期: 2023-09-27 18:07:30
我有一个如下的URL
http://yellowcpd.testpace.net
我怎么能得到yellowcpd从这个?我知道我可以用字符串解析做到这一点,但是c#中有内置的方法吗?
假设您的url始终是testpace.net
,请尝试:
var subdomain = Request.Url.Host.Replace("testpace.net", "").TrimEnd('.');
它只会给你主机的非testpace.net
部分。如果你没有Request.Url.Host
,你可以用new Uri(myString).Host
代替。
try this
string url = Request.Url.AbsolutePath;
var myvalues= url.Split('.');
我怎么能从这个得到黄色的cpd ?我知道我可以用字符串来做解析,但是c#中有内置的方法吗?
。Net没有提供从Uri.Host中提取特定部分的内置功能。您必须自己使用字符串操作或正则表达式。
域名字符串中唯一不变的部分是TLD。TLD是域名字符串的最后一位,例如。com,。net,。uk等。下面的所有内容都取决于其位置的特定TLD(所以你不能假设最后一部分的下一个是"域名",因为。co。英国应该是。co
符合要求
分两行:
string rawURL = Request.Url.Host;
string domainName = rawURL .Split(new char[] { '.', '.' })[1];
或大于1:
string rawURL = Request.Url.Host.Split(new char[] { '.', '.' })[1];
你的问题的简单答案是没有一个内置的方法来提取只是子域。话虽如此,这是我使用的解决方案…
public enum GetSubDomainOption
{
ExcludeWWW,
IncludeWWW
};
public static class Extentions
{
public static string GetSubDomain(this Uri uri,
GetSubDomainOption getSubDomainOption = GetSubDomainOption.IncludeWWW)
{
var subdomain = new StringBuilder();
for (var i = 0; i < uri.Host.Split(new char[]{'.'}).Length - 2; i++)
{
//Ignore any www values of ExcludeWWW option is set
if(getSubDomainOption == GetSubDomainOption.ExcludeWWW && uri.Host.Split(new char[]{'.'})[i].ToLowerInvariant() == "www") continue;
//I use a ternary operator here...this could easily be converted to an if/else if you are of the ternary operators are evil crowd
subdomain.Append((i < uri.Host.Split(new char[]{'.'}).Length - 3 &&
uri.Host.Split(new char[]{'.'})[i+1].ToLowerInvariant() != "www") ?
uri.Host.Split(new char[]{'.'})[i] + "." :
uri.Host.Split(new char[]{'.'})[i]);
}
return subdomain.ToString();
}
}
用法:
var subDomain = Request.Url.GetSubDomain(GetSubDomainOption.ExcludeWWW);
或
var subDomain = Request.Url.GetSubDomain();
我目前有默认设置包括WWW。您可以通过切换GetSubDomain()
方法中的可选参数值来轻松地扭转这一点。
在我看来,这允许一个选项在代码中看起来很好,而无需深入研究似乎是c#的"内置"。只是为了确认你的期望…我测试了三个值,如果使用了排除标志,这个方法将始终只返回"yellowcpd"。
- www.yellowcpd.testpace.net
- yellowcpd.testpace.net
- www.yellowcpd.www.testpace.net
.
上分割主机名总是会导致最后两个值是域名(例如something.com)
正如其他人指出的那样,您可以这样做:
var req = new HttpRequest(filename: "search", url: "http://www.yellowcpd.testpace.net", queryString: "q=alaska");
var host = req.Url.Host;
var yellow = host.Split('.')[1];
您想要的URL部分是主机名的一部分。您可能希望找到一些直接处理名称部分的方法,例如:"TestSpace中的子域(yellowcpd)",但这可能是不可能的,因为有效主机名的规则允许使用任意数量的标签(请参阅有效主机名)。主机名可以有任意数量的标签,以句号分隔。你必须添加额外的限制来得到你想要的东西。