C# 检查URL是否为有效的源

C# 检查URL是否为有效的源,c#,feed,argotic,C#,Feed,Argotic,我正在使用argoticsyndication框架来处理提要 但问题是,如果我将URL传递给Argotic,它不是有效的提要(例如,http://stackoverflow.com这是一个html页面,不是提要),程序挂起(我的意思是,Argotic停留在无限循环中) 那么,如何检查URL是否指向有效的提要呢?从.NET 3.5可以在下面执行此操作。如果它不是有效的提要,它将抛出异常 using System.Diagnostics; using System.ServiceModel.Synd

我正在使用argoticsyndication框架来处理提要

但问题是,如果我将URL传递给Argotic,它不是有效的提要(例如,
http://stackoverflow.com
这是一个html页面,不是提要),程序挂起(我的意思是,Argotic停留在无限循环中)


那么,如何检查URL是否指向有效的提要呢?

从.NET 3.5可以在下面执行此操作。如果它不是有效的提要,它将抛出异常

using System.Diagnostics;
using System.ServiceModel.Syndication;
using System.Xml;

public bool TryParseFeed(string url)
{
    try
    {
        SyndicationFeed feed = SyndicationFeed.Load(XmlReader.Create(url));

        foreach (SyndicationItem item in feed.Items)
        {
            Debug.Print(item.Title.Text);
        }
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}
或者,您可以尝试自己解析文档:

string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<event>This is a Test</event>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
string xml=“\n这是一个测试”;
XmlDocument xmlDoc=新的XmlDocument();
LoadXml(xml);
然后尝试检查根元素。它应该是提要元素,并具有“”命名空间:

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:re="http://purl.org/atompub/rank/1.0">

参考资料:

您可以检查内容类型。它必须是
text/xml
。请参阅以查找内容类型

您可以使用以下代码:

var request = HttpWebRequest.Create("http://www.google.com") as HttpWebRequest;
if (request != null)
{
    var response = request.GetResponse() as HttpWebResponse;

    string contentType = "";

    if (response != null)
        contentType = response.ContentType;
}
感谢你的回答

更新

若要检查它是否是提要地址,您可以使用该服务

更新2


正如BurundukXP所说,它有一个SOAP API。要使用它,您可以阅读的答案。

您可以使用。它有。

如果您只想将其转换为有效的RSS/ATOM,可以使用对其进行消毒。或者,您可以。

因为我的项目在web应用程序中,所以我不能信任标题。可能有人提供了无效的提要,但提供了有效的XML和有效的根元素,然后我的应用程序挂起…:(感谢您的更新。但有一个问题:
System.ServiceModel.Syndication
支持什么提要格式?在Atom 1.0和RSS 2.0中。您的方法的优点是不需要任何web请求来确定它是否有效。但缺点是,Argotic支持更多提要类型,但
System.ServiceModel.syndicateion
没有。AkiraYamamoto使用SyndicationFeed.Load()的一个问题是,它经常会在“有效”rss和atom提要上遇到dtd错误。问题是,根据规范,提要可能“无效”,但根据使用它们的应用程序,提要是有效的,因此SyndicationFeed.Load()消除了一堆好的提要。每个XML都不是提要。另外,请阅读我对另一个答案的评论。@ahmadalishafiee-您的核心陈述:“它必须是text/XML”是不正确的。首先,任何响应都可以表示任何内容类型,因此结果本身并不具有权威性。此外,text/rss+xml是rss源的有效内容类型。谢谢。您的答案似乎是最好的。但您能否解释一些关于SOAP API的更多信息?如何联系该API?是否可以使用GET请求调用该API?@MahdiGhiasi检查这篇文章-如果不清楚,我将稍后创建一个示例。如果您创建一个示例会更好:)Thanks@MahdiGhiasi好啊9-10小时后我就可以免费使用了。这项服务有一个限制:每秒1个请求。因此,我无法从服务器端对此服务发出请求。关于客户端,它也不允许ajax请求:,难道没有任何方法可以从客户端使用此服务吗?