积极答复者
silverlight4 浏览器应用调用twitter API的问题

问题
-
请问,我有一个twitter 应用,是用Silverlight实现的,需要用webclient 调用twitter API,写法是这样的
string MENTIONS_TIMELINE = "http://twitter.com/statuses/mentions.rss";
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient twitter = new WebClient();
twitter.Credentials = new NetworkCredential(UserName.Text, Password.Password);
twitter.UseDefaultCredentials = false; // must be set to false if providing your own credentials
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TwitterResultCompleted);
twitter.DownloadStringAsync(new Uri(MENTIONS_TIMELINE));
这样,如果该应用设置成"允许在浏览器外运行应用程序",上面的代码没有问题,能够正常访问twitter API,但如果不设置该选项,在浏览器里面运行,则不能访问twitter API,报"安全性错误",请高手解答,多谢
- 已移动 Sheng Jiang 蒋晟Moderator 2010年11月24日 0:10 (发件人:Windows Communication Foundation)
答案
-
你好,
我查看了一下twitter.com的cross domian policy,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="twitter.com" />
<allow-access-from domain="api.twitter.com" />
<allow-access-from domain="search.twitter.com" />
<allow-access-from domain="static.twitter.com" />
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="*.twitter.com" headers="*" secure="true"/>
</cross-domain-policy>即不允许twitter域之外的RIA程序来访问twitter.com,除非开启Silverlight OOB,并启用Elevated模式。
没什么好的解决办法,你只能寻找twitter是否提供了同样功能的API.
Mog Liang- 已建议为答案 Frank Xu LeiModerator 2010年11月22日 7:37
- 已标记为答案 逍遥客 2010年11月22日 10:49
全部回复
-
请问,我有一个twitter 应用,是用Silverlight实现的,需要用webclient 调用twitter API,写法实在这样的
string MENTIONS_TIMELINE = "http://twitter.com/statuses/mentions.rss";
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient twitter = new WebClient();
twitter.Credentials = new NetworkCredential(UserName.Text, Password.Password);
twitter.UseDefaultCredentials = false; // must be set to false if providing your own credentials
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TwitterResultCompleted);
twitter.DownloadStringAsync(new Uri(MENTIONS_TIMELINE));
这样,如果该应用设置成"允许在浏览器外运行应用程序",上面的代码没有问题,能够正常访问twitter API,但如果不设置该选项,在浏览器里面运行,则不能访问twitter API,报"安全性错误",请高手解答,多谢
- 已合并 Sheng Jiang 蒋晟Moderator 2010年11月24日 0:11
-
请问,我有一个twitter 应用,是用Silverlight实现的,需要用webclient 调用twitter API,写法是这样的
string MENTIONS_TIMELINE = "http://twitter.com/statuses/mentions.rss";
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient twitter = new WebClient();
twitter.Credentials = new NetworkCredential(UserName.Text, Password.Password);
twitter.UseDefaultCredentials = false; // must be set to false if providing your own credentials
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TwitterResultCompleted);
twitter.DownloadStringAsync(new Uri(MENTIONS_TIMELINE));
这样,如果该应用设置成"允许在浏览器外运行应用程序",上面的代码没有问题,能够正常访问twitter API,但如果不设置该选项,在浏览器里面运行,则不能访问twitter API,报"安全性错误",请高手解答,多谢
- 已合并 Sheng Jiang 蒋晟Moderator 2010年11月24日 0:11
-
请问,我有一个twitter 应用,是用Silverlight实现的,需要用webclient 调用twitter API,写法是这样的string MENTIONS_TIMELINE = "http://twitter.com/statuses/mentions.rss";
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient twitter = new WebClient();
twitter.Credentials = new NetworkCredential(UserName.Text, Password.Password);
twitter.UseDefaultCredentials = false; // must be set to false if providing your own credentials
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TwitterResultCompleted);
twitter.DownloadStringAsync(new Uri(MENTIONS_TIMELINE));
这样,如果该应用设置成"允许在浏览器外运行应用程序",上面的代码没有问题,能够正常访问twitter API,但如果不设置该选项,在浏览器里面运行,则不能访问twitter API,报"安全性错误",请高手解答,多谢
- 已合并 Sheng Jiang 蒋晟Moderator 2010年11月24日 0:12
-
请问,我有一个twitter 应用,是用Silverlight实现的,需要用webclient 调用twitter API,写法是这样的
string MENTIONS_TIMELINE = "http://twitter.com/statuses/mentions.rss";
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient twitter = new WebClient();
twitter.Credentials = new NetworkCredential(UserName.Text, Password.Password);
twitter.UseDefaultCredentials = false; // must be set to false if providing your own credentials
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TwitterResultCompleted);
twitter.DownloadStringAsync(new Uri(MENTIONS_TIMELINE));
这样,如果该应用设置成"允许在浏览器外运行应用程序",上面的代码没有问题,能够正常访问twitter API,但如果不设置该选项,在浏览器里面运行,则不能访问twitter API,报"安全性错误",请高手解答,多谢
- 已移动 Raymond TangModerator 2010年11月22日 8:01 (发件人:XML 与 Web Services 讨论区)
- 已合并 Mog Liang 2010年11月23日 5:29
-
请问,我有一个twitter 应用,是用Silverlight实现的,需要用webclient 调用twitter API,写法是这样的
string MENTIONS_TIMELINE = "http://twitter.com/statuses/mentions.rss";
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient twitter = new WebClient();
twitter.Credentials = new NetworkCredential(UserName.Text, Password.Password);
twitter.UseDefaultCredentials = false; // must be set to false if providing your own credentials
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TwitterResultCompleted);
twitter.DownloadStringAsync(new Uri(MENTIONS_TIMELINE));
这样,如果该应用设置成"允许在浏览器外运行应用程序",上面的代码没有问题,能够正常访问twitter API,但如果不设置该选项,在浏览器里面运行,则不能访问twitter API,报"安全性错误",请高手解答,多谢
- 已合并 Sheng Jiang 蒋晟Moderator 2010年11月24日 0:12
-
你好,
我查看了一下twitter.com的cross domian policy,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="twitter.com" />
<allow-access-from domain="api.twitter.com" />
<allow-access-from domain="search.twitter.com" />
<allow-access-from domain="static.twitter.com" />
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="*.twitter.com" headers="*" secure="true"/>
</cross-domain-policy>即不允许twitter域之外的RIA程序来访问twitter.com,除非开启Silverlight OOB,并启用Elevated模式。
没什么好的解决办法,你只能寻找twitter是否提供了同样功能的API.
Mog Liang- 已建议为答案 Frank Xu LeiModerator 2010年11月22日 7:37
- 已标记为答案 逍遥客 2010年11月22日 10:49