C# 如何检查有效的URL地址?

C# 如何检查有效的URL地址?,c#,asp.net,validation,url,url-redirection,C#,Asp.net,Validation,Url,Url Redirection,我有简单的代码,其中包括获取url路径并重定向到此url: private void Redirect(String path) { Uri validatedUri = null; var result = Uri.TryCreate(HelpURL + path, UriKind.Absolute, out validatedUri); if (result&&validatedUri!=null)

我有简单的代码,其中包括获取url路径并重定向到此url:

 private void Redirect(String path)
    {

        Uri validatedUri = null;
        var result = Uri.TryCreate(HelpURL + path, UriKind.Absolute, out validatedUri);
        if (result&&validatedUri!=null)
        {
            var wellFormed = Uri.IsWellFormedUriString(HelpURL + path, UriKind.Absolute);
            if(wellFormed)
            {
                Response.Write("Redirect to: " + HelpURL + path);
                Response.AddHeader("REFRESH", "1;URL=" + HelpURL + path);
            }
            else //error
            {
                Response.Write(String.Format("Validation Uri error!", path));
            }

        }
        else 
        {
Response.Write(String.Format("Validation Uri error!", path));
        }                                        
    }
Url示例:http://web-server/SomeSystemindex.html. 该地址无效,但: 在我的代码中,结果是正确的,格式良好的也是正确的

如何验证url地址

附加帮助URL+路径=http://web-server/SomeSystemindex.html 对于这个案子。其中HelpUrl为,path=index.html

p.p.S.我照Martin说的做-创建连接并检查状态代码

  HttpWebRequest req = WebRequest.Create(HelpURL + path) as HttpWebRequest;
                req.UseDefaultCredentials = true;
                req.PreAuthenticate = true;
                req.Credentials = CredentialCache.DefaultCredentials;

                var statusCode= ((HttpWebResponse)req.GetResponse()).StatusCode;

                if (statusCode == HttpStatusCode.NotFound)
                    isValid = false;
                else if (statusCode == HttpStatusCode.Gone)
                    isValid = false;
                else
                {
                    isValid = true;
                }

据我所知,确定地址是否有效的唯一方法是打开连接。如果连接有效,则地址有效。如果不是,则连接无效。有一些技巧可以过滤出错误的URL,但要知道地址是否有效,您需要打开一个连接

StackOverflow上已经发布了一个示例

或在此:

    URL url;
    URL wrongUrl;
    try {
        url = new URL("http://google.com");
        wrongUrl = new URL( "http://notavalidurlihope.com");
        HttpURLConnection con = (HttpURLConnection ) url.openConnection();
        System.out.println(con.getResponseCode());
        HttpURLConnection con2 = (HttpURLConnection ) wrongUrl.openConnection();
        System.out.println(con2.getResponseCode());
    } catch (IOException e) {
        System.out.println("Error connecting");
    }
注意:之后不要断开

输出:

200
Error connecting

据我所知,确定地址是否有效的唯一方法是打开连接。如果连接有效,则地址有效。如果不是,则连接无效。有一些技巧可以过滤出错误的URL,但要知道地址是否有效,您需要打开一个连接

StackOverflow上已经发布了一个示例

或在此:

    URL url;
    URL wrongUrl;
    try {
        url = new URL("http://google.com");
        wrongUrl = new URL( "http://notavalidurlihope.com");
        HttpURLConnection con = (HttpURLConnection ) url.openConnection();
        System.out.println(con.getResponseCode());
        HttpURLConnection con2 = (HttpURLConnection ) wrongUrl.openConnection();
        System.out.println(con2.getResponseCode());
    } catch (IOException e) {
        System.out.println("Error connecting");
    }
注意:之后不要断开

输出:

200
Error connecting

这个简单的助手方法使用正则表达式来确保网站URL的格式正确。如果有任何重要的空白,它也会失败

以下URL的通行证:

谷歌网站

www.google.com

它在以下情况下失败:

www.google.com/a带有空白的错误路径/

下面是我创建的助手方法:


这个简单的助手方法使用正则表达式来确保网站URL的格式正确。如果有任何重要的空白,它也会失败

以下URL的通行证:

谷歌网站

www.google.com

它在以下情况下失败:

www.google.com/a带有空白的错误路径/

下面是我创建的助手方法:


你说的“有效”是什么意思?http://web-server/SomeSystemindex.html 绝对是一个有效的URI。这确实是一个有效的URL?你怎么说它是无效的?@EliArbel,我的意思是浏览器无法导航到此URL..旁注:当URL被传递到参数中时,您应该始终注意URL注入的变化。我注意到这是一个私有方法,所以它可能不是问题。只是说说而已@海军上将-是的,当这种情况发生时,你可能会遇到一些更大的问题…:你说的“有效”是什么意思?http://web-server/SomeSystemindex.html 绝对是一个有效的URI。这确实是一个有效的URL?你怎么说它是无效的?@EliArbel,我的意思是浏览器无法导航到此URL..旁注:当URL被传递到参数中时,您应该始终注意URL注入的变化。我注意到这是一个私有方法,所以它可能不是问题。只是说说而已@海军上将-是的,当这种情况发生时,你可能会遇到一些更大的问题…:@Martin,是的,如果你能给出代码片段来检查连接-我认为这将是一个有效的回答:无论如何,你应该发布一个简短的代码示例,因为这实际上可以回答这个问题future@MartijnWoudstra不幸的是,我尝试使用HttpWebRequest webRequestObject=HttpWebRequestHttpWebRequest.CreateHelpURL+path;这是不是有什么问题。。当我尝试获取响应时,抛出异常是否有效url@Martin,是的,如果你能给出代码片段来检查连接-我认为这将是一个有效的回答:无论如何,你应该发布一个简短的代码示例,因为这实际上可以回答这个问题future@MartijnWoudstra不幸的是,我尝试使用HttpWebRequest webRequestObject=HttpWebRequestHttpWebRequest.CreateHelpURL+path;这是不是有什么问题。。当我尝试获取响应时,抛出异常的方式是有效的还是无效的url