我在做一个播放器,有个添加网络URL的问题,我想知道我如何去判断这个URL是否存在,可以播放的?就是404跳转也说明这个URL不存在。是基于.Net FrameWork2.0和MediaPlayer的。求各位大侠指点,贴出代码!:)谢谢了!

解决方案 »

  1.   


    public static bool IsUrlOk(string url)
    {
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    try
    {
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
    return response.StatusCode == HttpStatusCode.OK;
    }
    }
    catch (System.Net.WebException)
    {
    return false;
    }
    }
      

  2.   


            private bool UrlIsExist(String url)
            {
                System.Uri u = null;
                try
                {
                    u = new Uri(url);
                }
                catch { return false; }
                bool isExist = false;
                System.Net.HttpWebRequest r = System.Net.HttpWebRequest.Create(u) as System.Net.HttpWebRequest;
                r.Method = "HEAD";
                try
                {
                    System.Net.HttpWebResponse s = r.GetResponse() as System.Net.HttpWebResponse;
                    if (s.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        isExist = true;
                    }
                }
                catch (System.Net.WebException x)
                {
                    try
                    {
                        isExist = ((x.Response as System.Net.HttpWebResponse).StatusCode != System.Net.HttpStatusCode.NotFound);
                    }
                    catch { isExist = (x.Status == System.Net.WebExceptionStatus.Success); }
                }
                return isExist;
            }        private void CheckUrlAction()
            {
                Response.Write("<li>http://dotnet.aspx.cc/Images/ 是否存在:" + UrlIsExist("http://dotnet.aspx.cc/Images/"));
                Response.Write("<li>http://dotnet.aspx.cc/ImagesX/ 是否存在:" + UrlIsExist("http://dotnet.aspx.cc/ImagesX/"));
                Response.Write("<li>http://xxxxx/ 是否存在:" + UrlIsExist("http://xxxxx/"));
                Response.Write("<li>hxxxxxxxxxxxxxxxxxxx 是否存在:" + UrlIsExist("hxxxxxxxxxxxxxxxxxxx"));
                Response.Write("<li>http://dotnet.aspx.cc/Images/logoSite.gif 是否存在:" + UrlIsExist("http://dotnet.aspx.cc/Images/logoSite.gif"));
                Response.Write("<li>http://dotnet.aspx.cc/Images/logoSite2.gif 是否存在:" + UrlIsExist("http://dotnet.aspx.cc/Images/logoSite2.gif"));        }        protected void Button1_Click(object sender, EventArgs e)
            {
                CheckUrlAction();
            }
      

  3.   

    个人感觉在添加的时候其实不必判断是否存在,只需大致判断一下格式,比如是是否mp3等,就像QQ音乐播放器一样,在播放时如果可以播放就播放,不存在当然就无法播放,就把列表里的这首歌曲显示为红色
      

  4.   

    为什么说在添加时不判断呢?因为网络歌曲一般都不大稳定,比如服务器停机等原因都是客观存在的,如果一个url其实是正确的,但在你添加的时候服务器停机了,你就认为它不存在吗?听网络歌曲很多情况下都会出现不稳定的情况
      

  5.   


    我是用MediaPlayer API,我该怎么判断无法播放呢?是什么状态可以得到返回的信息?
      

  6.   


    //直接判断看看你给的URL能不能得到这个网站的源码就是了
            private string GetWebContent(string sUrl)
            {
                string strResult = "";
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sUrl);
                    //声明一个HttpWebRequest请求
                    request.Timeout = 3000000;
                    //设置连接超时时间
                    request.Headers.Set("Pragma", "no-cache");
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    if (response.ToString() != "")
                    {
                        Stream streamReceive = response.GetResponseStream();
                        Encoding encoding = Encoding.GetEncoding("UTF-8");
                        StreamReader streamReader = new StreamReader(streamReceive, encoding);
                        strResult = streamReader.ReadToEnd();
                    }
                }
                catch (Exception exp)
                {
                    //MessageBox.Show("出错");
                    MessageBox.Show("路径不存在");
                    return "";
                }
                return strResult;
            }
    string str=GetWebContent(url);//路径自己填进去
    if(str!="")
    {
       //存在
    }
    else
    {
       //不存在
    }
      

  7.   

    http://www.baidu.com/q.wma 这个地址不存在吧?但是返回是存在的,因为有404.
      

  8.   

    这个也是哈 那么再加一个判断呢
    if(str.IndexOf("404")>0)//也可以用正则表达式
    {
        
    }
      

  9.   

    那比如说403之类的Rewrite的,我还有什么更简单去判断?
      

  10.   

    System.Net.HttpStatusCode枚举包含各种响应状态。
      

  11.   

    System.Net.HttpStatusCode.OK说明此文件存在,并且说排除了404,403之类的Rewrite?