Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查url是否有效_C#_Asp.net_.net_Uri - Fatal编程技术网

C# 如何检查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

我正在尝试使用.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.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
    ?这解释了问题中的代码有什么问题,但无助于修复它。