2013-03-31 166 views
1

我希望能够检查指定的URL是否有效[最好主动和合式],如何检查URL是否有效?

//invalid 
http://fdsafsd.com/ 
//valid 
http://google.com/ 

这可能吗?我正在使用在其他帖子中指定的代码在计算器中,但他们似乎并没有工作。这是一个例子。

private bool checkWebsite(string url){ 
    WebRequest webRequest = WebRequest.Create(url); 
    WebResponse webResponse; 
    try{ 
     //System.Net.WebRequest does not contain a definition for GetResponse(); 
     webResponse = webRequest.GetResponse(); 
    } 
    catch 
     return false; 
    return true; 
} 

任何帮助表示赞赏。先谢谢你。

+1

你需要有更具体的了解你的意思是“有效”的东西。只是格式良好?或主动不返回HTTP错误? – Cairnarvon

+2

你为什么认为google.co无效?! **这是100%有效的URL!** – MarcinJuraszek

+0

@Cairnarvon如果可能的话,可以很好地形成和活动。我已经更新了这个问题。谢谢! – Jieqin

回答

1

这应该适合你。尽管不是最优雅的代码。

static void Main(string[] args) 
{ 
    var uriName = "http://www.google.com"; 
    Uri uriResult; 

    bool isUriValid = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp; 

    if (isUriValid) 
    { 
     var webRequest = HttpWebRequest.Create(uriResult); 
     // Only request the headers, not the whole content 
     webRequest.Method = "HEAD"; 
     try 
     { 
      // Exception is thrown if 404 
      var response = webRequest.GetResponse() as HttpWebResponse; 
      // Check if status return is 200 OK, then active. You might want to check the HttpStatusCode for others 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       Console.WriteLine(((int)response.StatusCode).ToString()); 
      } 
     } 
     catch (WebException e) 
     { 
      Console.WriteLine(e.Message); 
     } 
    } 
    else 
    { 
     Console.WriteLine("Url is not valid"); 
    } 

    Console.Read(); 
} 
+0

我试过你的解决方案,但变量'webRequest'没有'GetResponse()'方法。 无论如何。 – Jieqin

+0

好吧,我明白了。也许它不支持WP8。下班后我会在几个小时内回复你。但在此期间,您可以检查“HttpClient”类或“WebClient”。 'HttpClient'是来自MS的最新lib。但实施这个想法依然如此。发送请求以获取标题并检查响应代码。 –

0

回答了HttpClient的(你应该添加使用System.Net.Http):

private async Task<bool> IsURLAvailable(Uri url) 
    { 
     var httpClient = new HttpClient(); 

     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, url); 
     HttpResponseMessage response = await httpClient.SendAsync(request); 
     try 
     { 
      if (response.StatusCode == HttpStatusCode.OK) 
       return true; 
     } 
     catch (WebException e) 
     { 
      Debug.WriteLine(e.Message); 
     } 
     return false; 
    }