我有以下网址
http://yellowcpd.testpace.net
如何从中获取 yellowcpd ?我知道我可以用字符串解析来做到这一点,但是在C#中有内置的方式吗?
答案 0 :(得分:4)
试试这个
string url = Request.Url.AbsolutePath;
var myvalues= url.Split('.');
答案 1 :(得分:4)
假设您的网址始终为testpace.net
,请尝试以下操作:
var subdomain = Request.Url.Host.Replace("testpace.net", "").TrimEnd('.');
它只会给你主持人的非testpace.net
部分。如果您没有Request.Url.Host
,则可以改为new Uri(myString).Host
。
答案 2 :(得分:2)
这符合法案。
分成两行:
string rawURL = Request.Url.Host;
string domainName = rawURL .Split(new char[] { '.', '.' })[1];
或者一个人:
string rawURL = Request.Url.Host.Split(new char[] { '.', '.' })[1];
答案 3 :(得分:2)
你的问题的简单答案是没有内置的方法来提取子域。据说这是我使用的解决方案......
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#。只是为了确认你的期望......我测试了三个值,如果使用了exclude标志,这个方法总是只返回“yellowcpd”。
我使用的一个假设是......在.
上拆分主机名将始终导致最后两个值为域(即something.com)
答案 4 :(得分:1)
如何从中获取yellowcpd?我知道我可以用字符串做到这一点 解析,但在C#中有内置的方法吗?
.Net没有提供内置功能来从Uri.Host中提取特定部分。您必须自己使用字符串操作或正则表达式。
域名字符串中唯一不变的部分是TLD。 TLD是域名字符串的最后一位,例如.com,.net,.uk等。其他所有内容都取决于其位置的特定TLD(因此您不能假设最后一个部分是&#34;域名&#34; as。对于.co.uk,它将是.co
答案 5 :(得分:0)
正如其他人所指出的那样,你可以这样做:
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)”,但这可能是不可能的,因为有效主机名的规则允许任意数量的标签(参见Valid Host Names)。主机名可以包含任意数量的标签,以句点分隔。您必须添加其他限制才能获得所需内容,例如: “将主机名分隔为标签,如果存在则丢弃www,并取下一个标签”。