asp.net在打开弹出窗口之前检查url是否存在

时间:2012-10-18 14:42:39

标签: asp.net

目前我有以下在ButtonClick上运行的代码:

Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenWindow", 
"window.open('" + DocumentData.Tables[0].Rows[0]["WebAddress"].ToString() 
                + "','_blank');", true);

它打开弹出窗口,其中包含来自DataBase的给定链接(通常是指向文档或图像或视频的链接)。 但我需要稍微修改一下代码,我不知道应该使用哪种方法:

1)我需要检查url是否真的存在(如果URL是响应的),如果不是不打开弹出窗口,但显示一些消息。在这里我不知道如何检查Url是否存在?例如,如果url类似于www.thesitedoesntexists.com,则不要加载弹出窗口。

2)如果网址格式为www.yahoo.com而不是http://www.yahoo.comhttps://someurl.com,则上述内容无效。

如果我的网络应用程序为www.myapplication.com,则在上面的方案系统中,系统会打开网址www.myapplication.com/www.yahoo.com而不是www.yahoo.com。怎么处理呢?它可能与问题#1有某种关系。这是主要问题。

1 个答案:

答案 0 :(得分:1)

以下代码(未经测试)应完成以下任务:

  1. 将验证网址是否已定义
  2. 将通过http://或https://
  3. 确保其存在
  4. 将通过HttpRequest验证网址是否存在
  5. 将显示带有URL的弹出窗口,或者如果URL未定义或不存在则显示警告提示。
  6. 按钮点击处理程序代码:

    string url = DocumentData.Tables[0].Rows[0]["WebAddress"].ToString();
    string script;
    
    if (!string.IsNullOrEmpty(url))
    {
        // prepend http to url if it isn't there.
        if(!url.ToLower().StartsWith("http://") || !url.ToLower().StartsWith("https://"))
        {
            url = "http://" + url;
        }
    
        // verify URL exists:
        if (UrlExists(url))
        {
            script = "window.open('" + url  + "','_blank');";   
        }
        else
        {
            script = "alert('URL does not exist')";
        }
    }
    else
    {
        script = "alert('No URL specified!')";
    }
    
    Page.ClientScript.RegisterStartupScript(this.GetType(), "WindowScript", script, true);
    

    并在您的班级中定义以下网址检查方法:

    public static bool UrlExists(string url)
    {
       try
       {
          var request = WebRequest.Create(url) as HttpWebRequest;
          if (request == null) return false;
          request.Method = "HEAD";
          using (var response = (HttpWebResponse)request.GetResponse())
          {
             return response.StatusCode == HttpStatusCode.OK;
          }
       }
       catch (UriFormatException)
       {
          //Invalid Url
          return false;
       }
       catch (WebException)
       {
          //Unable to access url
          return false;
       }
    }
    

    我完全赞同UrlExists方法: http://paigecsharp.blogspot.ca/2011/01/verify-url-exists.html