[英]get html content of a page with Silverlight
我正在尝试使用silverlight获取页面的html内容。 Web响应和请求类在Silverlight中不起作用。
我做了一些谷歌搜索,我发现了一些东西。 这是我试过的:
public partial class MainPage : UserControl
{
string result;
WebClient client;
public MainPage()
{
InitializeComponent();
this.result = string.Empty;
this.client = new WebClient();
this.client.DownloadStringCompleted += ClientDownloadStringCompleted;
}
private void btn1_Click(object sender, RoutedEventArgs e)
{
string url = "http://www.nu.nl/feeds/rss/algemeen.rss";
this.client.DownloadStringAsync(new Uri(url, UriKind.Absolute));
if (this.result != string.Empty && this.result != null)
{
this.txbSummery.Text = this.result;
}
}
private void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
this.result = e.Result;
//handle the response.
}
}
按下按钮后,它会给我一个运行时错误:
Microsoft JScript运行时错误:Silverlight应用程序中的未处理错误操作期间发生异常,导致结果无效。 检查InnerException以获取异常详细信息。 在System.Net上System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e)的System.Net.DownloadStringCompletedEventArgs.get_Result()处的System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()处于JWTG.MainPage.ClientDownloadStringCompleted(Object sender,DownloadStringCompletedEventArgs e)。 WebClient.DownloadStringOperationCompleted(Object arg)
我尝试了很多东西,但都失败了。
我错过了什么? 或者有谁知道我怎么能以不同的方式实现这一目标?
提前致谢!
试试这个,而不是你的btn1_Click
和ClientDownloadStringCompleted
方法。 它在下载订阅源后调用GUI线程以更新文本框。 如果由于网络上的错误而失败,它将解压缩异常(作为TargetInvocationException
的内部异常TargetInvocationException
)并重新抛出内部异常。
private void btn1_Click(object sender, RoutedEventArgs e)
{
string url = "http://www.nu.nl/feeds/rss/algemeen.rss";
this.client.DownloadStringAsync(new Uri(url));
}
private void ClientDownloadStringCompleted(object sender,
DownloadStringCompletedEventArgs e)
{
try
{
Dispatcher.BeginInvoke(() => this.txbSummery.Text = e.Result ?? "");
}
catch (TargetInvocationException tiex)
{
throw tiex.InnerException;
}
}
如果错误再次发生(我想会发生这种情况),请在此处发布一个堆栈跟踪和错误消息。
这与clientaccesspolicy.xml有关。 在这里阅读更多: http : //msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx
“如果连接请求是从WebClient或HTTP类到跨域站点,则Silverlight运行时会尝试使用HTTP协议下载安全策略文件.Silverlight运行时首先尝试下载名称为的Silverlight策略文件使用HTTP协议在请求的目标域的根目录下的“clientaccesspolicy.xml”。
如果未找到“clientaccesspolicy.xml”(Web请求返回404状态代码),使用意外的mime类型返回,无效的XML或具有无效的根节点,则Silverlight运行时将发出请求对于使用HTTP协议在请求的目标域的根目录下具有名称“crossdomain.xml”的Flash策略文件。
不允许对策略文件进行HTTP重定向。 策略文件的重定向将导致拒绝访问的SecurityException。“
你试一下
private void btn1_Click(object sender, RoutedEventArgs e)
{
string url = "http://www.nu.nl/feeds/rss/algemeen.rss";
this.client.DownloadStringAsync(new Uri(url, UriKind.Absolute));
}
private void ClientDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
Stream s = e.Result;
StreamReader strReader = new StreamReader(s);
string webContent = strReader.ReadToEnd();
s.Close();
this.txbSummery.Text =webContent;
}
在这一行
this.client.DownloadStringAsync(new Uri(url, UriKind.Absolute));
您正在后台线程中声明异步下载。 在下一行,你不知何故预计它已经完成了吗?
如果您对线程不了解,请先尝试使用DownloadString。 然后你的代码将工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.