C# 如何检查url是否有效
我正在尝试使用.NET从有效url中筛选出无效url 我正在使用这个方法 它具有以下语法C# 如何检查url是否有效,c#,asp.net,.net,uri,C#,Asp.net,.net,Uri,我正在尝试使用.NET从有效url中筛选出无效url 我正在使用这个方法 它具有以下语法 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.c
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);
}
}
Uri=null;
var domainList=新列表();
域名列表。添加(“asas”);
域名列表(www.stackoverflow.com);
域名列表(www.codera.org);
域名列表添加(“www.joker.testtest”);
domainList.Add(“about.me”);
域名列表(www.ma.tt);
var correctList=新列表();
foreach(域列表中的变量项)
{
if(Uri.TryCreate(item,UriKind.RelativeOrAbsolute,out Uri))
{
更正列表。添加(项目);
}
}
我正在尝试上面的代码,我希望它能尽快从列表中删除
和www.joker.testtest
,但它没有
谁能帮我一下吗
更新:
刚刚试用了Uri.iswellFormedUrString
这也没用
更多更新
有效uri的列表
- www.abc.com
- www.aa.org
- www.aas.co
- www.hhh.net
- www.ma.tt
无效uri的列表
- 以及
- 作为#悲哀的
- 这是无效的
- www.asa.toptop
试试这个:
公共静态布尔(
字符串uriString,
乌里金德乌里金德
)
或者,也可以使用RegExp执行此操作,如:
^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
看看这个你所有的例子都是有效的,
有些是绝对的URL,有些是相对的,这就是为什么没有一个被删除
对于每个Uri,您可以尝试构造一个HttpWebRequest
类
然后检查回答是否正确。您所有的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");
}
在检查了其他人的答案后,我知道你们并不是在寻找域的存在,你们需要根据你们的语法测试它们。。。或者域名的语法对吗
为此,您只需要依赖正则表达式测试。。。并制定适当的规则对域名进行评估,如果失败,则将其从列表中排除
您可以根据需要修改这些模式,然后使用列表中的每个元素对它们进行测试。问题是,您在此处添加的URL都不会被归类为绝对URL。为此,必须在URL的协议前面加上前缀
你可以测试并发现这一点
www.stackoverflow.com-相对URL
-绝对URL
//www.stackoverflow.com-绝对URL(这里不奇怪。)
关键是,您必须至少在/
前面加前缀,以表明它是一个绝对URL
因此,简而言之,由于您的所有URL都是相对URL,因此它通过了所有测试。您似乎对URL(或URI,此处的差异不显著)的确切含义感到困惑。例如,http://stackoverflow.com
是一个有效的绝对URL。另一方面,stackoverflow.com
在技术上是一个有效的相对URL,但它将引用当前目录中名为stackoverflow.com
的文件,而不是具有该名称的网站。但是stackoverflow.com
是一个注册域名
如果要检查域名是否有效,需要定义“有效”的确切含义:
它是一个有效的域名吗?检查字符串是否由点分隔的部分组成,每个部分可以包含字母、数字和连字符(-
)。例如,asas
和this.not.valid
都是有效的域名
可能是互联网域名吗?Internet上的域名(与intranet相反)是特定的,因为它们始终具有TLD(顶级域)。所以,asas
当然不是一个互联网域名,但是这个。不是。可能是有效的
它是现有TLD下的域名吗?你可以下载并检查。例如,this.not.valid
在此规则下将不被视为有效,但thisisnotvalid.com
将被视为有效
是注册域名吗
域名是否解析为IP地址?可以注册域名,但其DNS记录中可能仍然没有IP地址
计算机是否将域名指向响应请求?最有意义的请求是一个简单的HTTP请求(例如,尝试访问http://domaininquestion/
)或ping
看看这个:您对有效URI的定义是什么?您所有的示例都是有效的URI,但并非所有都是真实的域。您需要定义“无效”。如果“Invalid”意味着URI不存在,那么我的解决方案将起作用。如果“无效”表示“格式不正确”,则O.D.解决方案就足够了。否则,您需要定义“无效”<代码>博物馆
也是一个有效的顶级域名。比如www.asa.MUSEUM“有效吗?检查此处的TLD:从中读取后尝试,但不起作用。它们结构良好。正如OP添加到问题中,它不能满足他的需要。@Yasser那么你必须提出请求并测试它的成功或404错误asas
和www.joker.testtest
是否从列表中无效技术上来说,这是正确的。但是说www.stackoverflow.com
是一个有效的相对URL并不正确,因为这将表示当前目录中名为www.stackoverflow.com
的文件。这里是什么MyClient
?这解释了问题中的代码有什么问题,但无助于修复它。