System.ServiceModel.Syndication身份验证

时间:2010-02-18 16:10:16

标签: c# authentication rss

如何使用System.ServiceModel.Syndication身份验证来读取私有RSS?

我现在使用的代码只是禁止返回。

我尝试在网址上添加& PASS =密码和& PASSWORD =密码,但它没有帮助。

    try
    {
        using (XmlReader reader = XmlReader.Create("http://trac:8080/Project/report/7?format=rss&USER=enr"))
        {
            tracFeed = SyndicationFeed.Load(reader);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

2 个答案:

答案 0 :(得分:1)

您是否尝试过为您的URI创建WebRequest,并将凭据传递给webrequest。然后你可以简单地从请求的响应流创建一个XmlReader,并通过SyndicationFeed.Load加载该读取器,afaik加载本身不提供传递凭证的直接方式,您需要发出Web请求并将基本凭据附加到URI你在请求。此article正在尝试执行与您的问题类似的操作。

答案 1 :(得分:1)

@bnkdev 你是对的,但有些东西不起作用我不知道为什么但是它似乎是服务器上的一个问题我猜?

    SyndicationFeed tracFeed;

    string user = "enr";
    string password = "enr";

    System.Net.WebClient wc = new System.Net.WebClient();

    wc.Credentials = new System.Net.NetworkCredential(user, password);

    //this works!
    string web = wc.DownloadString("http://trac:8080/project/login/xmlrpc");

    //this gives a 403 forbidden !! :-(
    System.IO.Stream webClientStream = wc.OpenRead("http://trac:8080/project/report/7?format=rss&USER=enr");

    try
    {

        using (XmlReader reader = XmlReader.Create(webClientStream))
        {
            tracFeed = SyndicationFeed.Load(reader);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        webClientStream.Close();
    }

两个网址都在IE中工作,区别在于第一个网页会立即弹出一个登录窗口,但第二个网址会将我重定向到我可以登录的页面...

所以我觉得那里有些东西可疑......