我正在尝试使用.NET过滤掉有效网址中的无效网址。
我正在使用Uri.TryCreate()方法。
它具有以下语法
public static bool TryCreate(Uri baseUri,string relativeUri,out Uri result)
现在我正在做这个......
Uri uri = null;
var domainList = new List<string>();
domainList.Add("asas");
domainList.Add("www.stackoverflow.com");
domainList.Add("www.codera.org");
domainList.Add("www.joker.testtest");
domainList.Add("about.me");
domainList.Add("www.ma.tt");
var correctList = new List<string>();
foreach (var item in domainList)
{
if(Uri.TryCreate(item, UriKind.RelativeOrAbsolute, out uri))
{
correctList.Add(item);
}
}
我正在尝试上面的代码,我希望它从列表中删除asas
和www.joker.testtest
,但它不会。
有人可以帮我解决这个问题。
更新:
刚试过Uri.IsWellFormedUriString
这也没有帮助。
更新
有效的uri列表
无效的uri列表
答案 0 :(得分:2)
您似乎对确切的URL(或URI,这里的差异不重要)感到困惑。例如,http://stackoverflow.com
是有效的绝对URL。另一方面,stackoverflow.com
在技术上是一个有效的相对URL,但它会引用当前目录中名为stackoverflow.com
的文件,而不是具有该名称的网站。但stackoverflow.com
是已注册的域名。
如果您想检查域名是否有效,您需要定义“有效”的具体含义:
-
)。例如,asas
和this.not.valid
都是有效的域名。asas
肯定不是互联网域名,但this.not.valid
可能是。this.not.valid
在此规则下不会被视为有效,但thisisnotvalid.com
会。http://domaininquestion/
)或ping。答案 1 :(得分:1)
试试这个:
public static bool IsWellFormedUriString( string uriString, UriKind uriKind )
或者Alternativly你可以使用RegExp这样做:
^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
参加此list
答案 2 :(得分:1)
问题是您在此处添加的网址都不会归类为绝对网址。为此,你必须在URL的协议前加上它。
您可以测试并找出
www.stackoverflow.com - 相对网址
http://www.stackoverflow.com - 绝对网址
//www.stackoverflow.com - 绝对网址(这里不足为奇。Refer RFC 3986: "Uniform Resource Identifier (URI): Generic Syntax", Section 4.2)
重点是你必须至少加//
前缀才能显示它是一个绝对网址。
因此,简而言之,由于您的所有网址都是相对网址,因此会通过您的所有测试。
答案 3 :(得分:0)
您的所有示例都有效,
有些是绝对的URL,有些是相对的,这就是为什么没有一个被删除。
对于每个Uri,您可以尝试构建一个HttpWebRequest
类
然后检查是否有正确的答案。
答案 4 :(得分:0)
在检查其他人的答案后,我知道你不是在寻找域的存在并且ping回来你需要根据你的GRAMMER ...或者域名语法对它们进行测试吗?
为此,您只需要依赖正则表达式测试...并制定适当的规则来制定域名,如果失败则将其从列表中排除。
您可以adopt这些模式并修改一个以满足您的需求,然后使用列表中的每个元素对其进行测试。
答案 5 :(得分:-1)
您的所有URI
都格式正确URI
,因此TryCreate
和IsWellFormedUriString
将不适用于您的情况。
,解决方案正在尝试打开URI:
using(var client = new MyClient()) {
client.HeadOnly = true;
// fine, no content downloaded
string s1 = client.DownloadString("www.stackoverflow.com");
// throws 404
string s2 = client.DownloadString("www.joker.testtest");
}