如何知道url是否适用于在webbrowser winforms中导航

时间:2014-03-15 14:40:45

标签: c# winforms

我正在基于webbrowser控件的Windows窗体应用程序中创建一个Web浏览器。

我正在尝试将网址textbox设置为2个目的:用于导航和搜索,例如在chrome中。 我添加了这段代码:

            try
            {
               Uri urlResult = new Uri(urlText.Text);
               webbrowser1.Navigate(urlText.Text);

            }
            catch
            {
               webbrowser1.Navigate("http://google.com/search?q=" + urlText.Text);
            }

问题是当我输入“youtube.com”时,这不能是Uri所以我在谷歌中得到这个

如何执行此操作? 欢迎任何其他建议 提前谢谢

1 个答案:

答案 0 :(得分:0)

问题:在您当前的代码中,您没有检查URL是否有效。您需要首先验证给定的URL是否可访问。

解决方案:创建一个单独的函数来验证网址是否成功,然后导航到网址,否则在谷歌中打开它。

试试这个:

using using System.Net;

private void button3_Click_1(object sender, EventArgs e)
{   
        string url = string.Empty;
        string urlProtocol = "http://"; //or https
        if (!urlText.Text.Trim().Contains(urlProtocol))
            url = urlProtocol + urlText.Text;
        else
            url = urlText.Text;
        if (CheckURL(url))
        {
            Uri urlResult = new Uri(url);
            webbrowser1.Navigate(url);
        }
        else
        {
            webbrowser1.Navigate("http://google.com/search?q=" + urlText.Text);
        }

}

bool CheckURL(string url)
{

    var req = (HttpWebRequest)HttpWebRequest.Create(url);
    bool isURLValid = false;
    req.AllowAutoRedirect = false;
    try
    {
        using (var resp = req.GetResponse())
        {
            var location = resp.Headers["Location"];
            if (!String.IsNullOrEmpty(location))
            {
                isURLValid = true;
            }
        }
    }
    catch
    {
        isURLValid = false;
    }
    return isURLValid;  
}