Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用webrequest检查链接是否中断或关闭?_C#_Httpwebrequest_Httpwebresponse - Fatal编程技术网

C# 如何使用webrequest检查链接是否中断或关闭?

C# 如何使用webrequest检查链接是否中断或关闭?,c#,httpwebrequest,httpwebresponse,C#,Httpwebrequest,Httpwebresponse,我从新闻网站的RSS获取数据,并在listview中显示(例如标题、描述、发布日期、标签、图像和评论计数),但当链接断开或关闭时,我没有什么问题,我会出错。(mscorlib.dll中发生“System.AggregateException”类型的未处理异常) 我想检查链接是否断开或关闭webrequest跳过此地址并继续到其他地址 首先检查关于webrequest的主题,但我并没有找到我想要的答案。 只是这个主题提供了一个想法,但我没有集成到我的代码中。() 谢谢你现在的帮助 这是我的主课 p

我从新闻网站的RSS获取数据,并在listview中显示(例如标题、描述、发布日期、标签、图像和评论计数),但当链接断开或关闭时,我没有什么问题,我会出错。(mscorlib.dll中发生“System.AggregateException”类型的未处理异常) 我想检查链接是否断开或关闭webrequest跳过此地址并继续到其他地址

首先检查关于webrequest的主题,但我并没有找到我想要的答案。 只是这个主题提供了一个想法,但我没有集成到我的代码中。()

谢谢你现在的帮助

这是我的主课

public static Dictionary<string, HaberYildizi> HaberYildiziHaberList = new Dictionary<string, HaberYildizi>();
    public static bool degismisMi = false;

    public Dictionary<string, HaberYildizi> GetTagsHaberYildizi()
    {
        List<IBaseClass> yeniHaberList = new List<IBaseClass>();
        degismisMi = false;

        XmlDocument xdoc = new XmlDocument();
        xdoc.Load("http://www.haberyildizi.com/rss.php");
        XmlElement el = (XmlElement)xdoc.SelectSingleNode("/rss");

        if (el != null)
            el.ParentNode.RemoveChild(el);

        XmlNode Haberler = el.SelectSingleNode("channel");

        List<HaberYildizi> newHaberYildizi = new List<HaberYildizi>();
        string htmlStr = String.Empty;

        foreach (XmlNode haber in Haberler.SelectNodes("item"))
        {
            var link = haber.SelectSingleNode("link").InnerText;

            if (HaberYildiziHaberList.ContainsKey(link))
                continue;

            HaberYildizi haberYildizi = new HaberYildizi();
            haberYildizi.Title = WebUtility.HtmlDecode(haber.SelectSingleNode("title").InnerText);

            if (haber.SelectSingleNode("description").InnerText.Contains("</a>"))
            {
                var str1 = haber.SelectSingleNode("description").InnerText.IndexOf("</a>");
                var str2 = haber.SelectSingleNode("description").InnerText.Substring(str1 + 4);
                haberYildizi.Description = WebUtility.HtmlDecode(str2);
            }
            else
            {
                haberYildizi.Description = WebUtility.HtmlDecode(haber.SelectSingleNode("description").InnerText);
            }

            haberYildizi.Image = haber.SelectSingleNode("image").InnerText;

            haberYildizi.Link = link;
            var format = DateTime.Parse(haber.SelectSingleNode("pubDate").InnerText.Replace("Z", ""));
            haberYildizi.PubDate = format;

        //*************************************
            htmlStr = Utilities.GetResponseStr(haberYildizi.Link).Result; // mistake is here 
        //*************************************
            haberYildizi.Tags = GetTags(htmlStr);

            haberYildizi.Comment = GetCommentCount(htmlStr);

            if (HaberYildiziHaberList.ContainsKey(haber.SelectSingleNode("link").InnerText) == false)
            {
                degismisMi = true;
                HaberYildiziHaberList.Add(link, haberYildizi);
                newHaberYildizi.Add(haberYildizi);
            }
            yeniHaberList.Add(haberYildizi);
        }
        return HaberYildiziHaberList;
    }
    public int GetCommentCount(string htmlStr)
    {
        int count = 0;
        string commentKeyword = "label label-important\">";
        var comment = htmlStr.IndexOf(commentKeyword) + 23;
        if (comment != -1)
        {
            var comment2 = htmlStr.IndexOf("</span>", comment);

            var comment4 = htmlStr.Substring(comment, comment2 - comment).Trim();
            count = Convert.ToInt32(comment4);

        }
        return count;
    }
    public List<string> GetTags(string htmlStr)
    {            
        List<string> listele = new List<string>();
        string begenningKeyword = "<meta name=\"keywords\" content=\"";

        var tags = htmlStr.IndexOf(begenningKeyword);

        var final_response2 = htmlStr.Substring(tags + begenningKeyword.Length);
        var tagsBol = final_response2.IndexOf("\" />");

        var lastTags = final_response2.Substring(0, tagsBol);
        var tagsSonuc = lastTags.Split(',');
        foreach (var tag in tagsSonuc)
        {
            listele.Add(tag);
        }
        return listele;
    }
}
publicstaticdictionary HaberYildiziHaberList=newdictionary();
公共静态bool degismi=false;
公共词典GetTagsHaberYildizi()
{
List yeniHaberList=新列表();
degismi=假;
XmlDocument xdoc=新的XmlDocument();
xdoc.Load(“http://www.haberyildizi.com/rss.php");
xmlement el=(xmlement)xdoc.SelectSingleNode(“/rss”);
如果(el!=null)
el.ParentNode.RemoveChild(el);
XmlNode Haberler=el.SelectSingleNode(“频道”);
List newHaberYildizi=新列表();
string htmlStr=string.Empty;
foreach(Haberler.SelectNodes(“项”)中的XmlNode-haber)
{
var link=haber.SelectSingleNode(“link”).InnerText;
if(HaberYildiziHaberList.ContainsKey(链接))
继续;
HaberYildizi HaberYildizi=新的HaberYildizi();
haberYildizi.Title=WebUtility.HtmlDecode(haber.SelectSingleNode(“Title”).InnerText);
if(haber.SelectSingleNode(“description”).InnerText.Contains(“”)
{
var str1=haber.SelectSingleNode(“description”).InnerText.IndexOf(“”);
var str2=haber.SelectSingleNode(“description”).InnerText.Substring(str1+4);
haberYildizi.Description=WebUtility.HtmlDecode(str2);
}
其他的
{
haberYildizi.Description=WebUtility.HtmlDecode(haber.SelectSingleNode(“Description”).InnerText);
}
haberYildizi.Image=haber.SelectSingleNode(“Image”).InnerText;
Link=Link;
var format=DateTime.Parse(haber.SelectSingleNode(“pubDate”).InnerText.Replace(“Z”);
haberYildizi.PubDate=格式;
//*************************************
htmlStr=Utilities.getresponsest(haberYildizi.Link).Result;//这里有错误
//*************************************
Tags=GetTags(htmlStr);
haberYildizi.Comment=GetCommentCount(htmlStr);
if(HaberYildiziHaberList.ContainsKey(haber.SelectSingleNode(“link”).InnerText)==false)
{
degismi=真;
添加(链接,haberYildizi);
newHaberYildizi.Add(haberYildizi);
}
添加(haberYildizi);
}
返回HaberYildiziHaberList;
}
public int GetCommentCount(字符串htmlStr)
{
整数计数=0;
string commentKeyword=“label-label-important\”>”;
var comment=htmlStr.IndexOf(commentKeyword)+23;
如果(注释!=-1)
{
var comment2=htmlStr.IndexOf(“,comment”);
var comment4=htmlStr.Substring(comment,comment2-comment).Trim();
计数=转换为32(注释4);
}
返回计数;
}
公共列表GetTags(字符串htmlStr)
{            
List LISTEL=新列表();
字符串begenningKeyword=“”);
var lastTags=最终响应2.子字符串(0,tagsBol);
var tagsSonuc=lastTags.Split(',');
foreach(tagsSonuc中的var标记)
{
添加(标签);
}
返回列表;
}
}
这是我的实用课

public class Utilities
{
    public static async Task<string> GetResponseStr(string link)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        StreamReader stream = new StreamReader(response.GetResponseStream());
        string final_response = stream.ReadToEnd();
        return final_response;
    }
公共类实用程序
{
公共静态异步任务GetResponseST(字符串链接)
{
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(link);
HttpWebResponse=(HttpWebResponse)request.GetResponse();
StreamReader stream=新的StreamReader(response.GetResponseStream());
字符串final_response=stream.ReadToEnd();
返回最终响应;
}

}

执行请求并获取HttpWebResponse时,可以检查StatusCode属性,如果它是404或200以外的任何内容,则可以认为它不可用

我建议创建一个类,以便在出现任何错误时传递web响应的状态代码


希望有帮助!

在执行请求并获取HttpWebResponse时,您可以检查StatusCode属性,如果它是404或200以外的任何内容,则可以认为它不可用

我建议创建一个类,以便在出现任何错误时传递web响应的状态代码


希望能有所帮助!

您只需简单地集成到代码中,如下所示:

public static async Task<string> GetResponseStr(string link)
        {
            var final_response = string.Empty;
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                StreamReader stream = new StreamReader(response.GetResponseStream());
                final_response = stream.ReadToEnd();
            }
            catch (Exception ex)
            {
                //DO whatever necessary like log or sending email to notify you   
            }

            return final_response;
        }

您只需简单地集成到代码中,如下所示:

public static async Task<string> GetResponseStr(string link)
        {
            var final_response = string.Empty;
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                StreamReader stream = new StreamReader(response.GetResponseStream());
                final_response = stream.ReadToEnd();
            }
            catch (Exception ex)
            {
                //DO whatever necessary like log or sending email to notify you   
            }

            return final_response;
        }

我只有端点网址和访问令牌。然后我记录了这样的错误请求

   if (response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            StreamReader stream = new StreamReader(response.GetResponseStream());
            string final_response = stream.ReadToEnd();
            return final_response;
            }
 else
            {
                Logger.CreateLogEntry("<== WebRequest ", "Could not Connect to server. Server Response Code: " + response.StatusCode);
                //Add bad request handler
                return null;
            }
if(response.StatusCode==System.Net.HttpStatusCode.OK)
{
StreamReader stream=新的StreamReader(response.GetResponseStream());
字符串final_response=stream.ReadToEnd();
返回最终响应;
}
其他的
{

CreateLogEntry(“我只有端点web地址和访问令牌。然后我记录了这样的错误请求

   if (response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            StreamReader stream = new StreamReader(response.GetResponseStream());
            string final_response = stream.ReadToEnd();
            return final_response;
            }
 else
            {
                Logger.CreateLogEntry("<== WebRequest ", "Could not Connect to server. Server Response Code: " + response.StatusCode);
                //Add bad request handler
                return null;
            }
if(response.StatusCode==System.Net.HttpStatusCode.OK)
{
StreamReader stream=新的StreamReader(response.GetResponseStream());
字符串final_response=stream.ReadToEnd();
返回最终响应;
}