【问题标题】:asp.net check if url exists before opening popupasp.net 在打开弹出窗口之前检查 url 是否存在
【发布时间】:2012-10-09 01:36:52
【问题描述】:

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

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

它会打开带有来自数据库的给定链接的弹出窗口(通常是文档或图像或视频的链接)。 但是我需要稍微修改一下代码,我不知道应该使用哪些方法:

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

2) 如果 url 格式为 www.yahoo.com 而不是 http://www.yahoo.comhttps://someurl.com,则上述方法无效。

如果我的 Web 应用程序是 www.myapplication.com,那么在上述场景中,系统会打开 url www.myapplication.com/www.yahoo.com 而不是 www.yahoo.com。如何处理?它可能与问题#1有关。这是主要问题。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

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

    1. 将验证 url 是否已定义
    2. 将确保它带有 http:// 或 https://
    3. 将通过 HttpRequest 验证 URL 是否存在
    4. 将显示加载了 URL 的弹出窗口,或者如果 URL 未定义或不存在,则会显示警告警报。

    按钮点击处理代码:

    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);
    

    并在您的类中定义以下 URL 检查方法:

    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

    【讨论】:

    • 这并不能解决实际问题。链接可能不正确(不存在),例如 www.test.com -> 我现在需要打开它。这也不能解决我的第二个主要问题。
    • @renathy 您首先需要定义“存在”。我以为你的意思是它已定义。您是否要求代码检查该站点是否存在? IE。通过 HTTP 请求进行验证?
    • 我不知道如何验证它,但我真的需要知道网站是否存在(如果 url 响应),我的第二个问题是我的主要问题。
    • 这几乎可以工作(我已将 || 更改为 &&),但如果我确实有 ftp 或其他前缀而不是 http 或 https?我的意思是有有限的前缀吗?
    • @renathy 以上期望基于您的问题的 HTTP 地址。如果您需要其他协议,则需要增强 UrlExists 方法以支持它们并修改代码。现在 ftp:// 地址会以 http://ftp://myaddress.com 结尾,因为代码只在寻找 http(s)。
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多