C# 从DownloadStringCompletedEventArgs获取错误Uri
基本上我想记录测试时产生错误的uri,使用调试器我可以找到失败的uri,但是我不知道如何检索它,下面是一个打印屏幕C# 从DownloadStringCompletedEventArgs获取错误Uri,c#,webclient,C#,Webclient,基本上我想记录测试时产生错误的uri,使用调试器我可以找到失败的uri,但是我不知道如何检索它,下面是一个打印屏幕 感谢您的建议。不要调用WebClient.DownloadStringAsync(Uri),而是调用重载DownloadString(Uri,对象),将Uri作为第二个参数传递。然后,在事件处理程序中,您可以将e.UserToken的值强制转换为Uri,以检索该值。即: (e.Error.Response as HttpWebResponse).ResponseUri Uri
感谢您的建议。不要调用
WebClient.DownloadStringAsync(Uri)
,而是调用重载DownloadString(Uri,对象)
,将Uri
作为第二个参数传递。然后,在事件处理程序中,您可以将e.UserToken
的值强制转换为Uri
,以检索该值。即:
(e.Error.Response as HttpWebResponse).ResponseUri
Uri uri = new Uri("http://example.com");
WebClient client = new WebClient();
client.DownloadStringCompleted = StringDownloaded;
client.DownloadStringAsync(uri, uri);
void StringDownloaded(object sender, DownloadStringCompletedEventArgs e)
{
Uri uri = (Uri)e.UserToken;
...
}
您可以使用此技术将任何类型的状态传递给事件处理程序。而不是调用
WebClient.DownloadStringAsync(Uri)
,调用重载,DownloadString(Uri,Object)
,将Uri
作为第二个参数传递。然后,在事件处理程序中,您可以将e.UserToken
的值强制转换为Uri
,以检索该值。即:
Uri uri = new Uri("http://example.com");
WebClient client = new WebClient();
client.DownloadStringCompleted = StringDownloaded;
client.DownloadStringAsync(uri, uri);
void StringDownloaded(object sender, DownloadStringCompletedEventArgs e)
{
Uri uri = (Uri)e.UserToken;
...
}
您可以使用此技术将任何类型的状态传递给事件处理程序。Ash对Jim Mischel答案的评论是,在事件处理程序函数中传递给DownloadStringAsync的UserToken可以在e.UserState中访问(e.UserToken不存在于DownloadStringCompletedEventArgs对象e上) i、 e.这项工作:
Uri uri = new Uri("http://example.com");
WebClient client = new WebClient();
client.DownloadStringCompleted = StringDownloaded;
client.DownloadStringAsync(uri, uri);
void StringDownloaded(object sender, DownloadStringCompletedEventArgs e){
Uri uri = (Uri)e.UserState;
...
}
Ash对Jim Mischel的回答的评论是,在事件处理程序函数中传递给DownloadStringAsync的UserToken可以在e.UserState中访问(e.UserToken不存在于DownloadStringCompletedEventArgs对象e上) i、 e.这项工作:
Uri uri = new Uri("http://example.com");
WebClient client = new WebClient();
client.DownloadStringCompleted = StringDownloaded;
client.DownloadStringAsync(uri, uri);
void StringDownloaded(object sender, DownloadStringCompletedEventArgs e){
Uri uri = (Uri)e.UserState;
...
}
但是如果有重定向,ResponseUri不是与请求的Uri不同吗?但是如果有重定向,ResponseUri不是与请求的Uri不同吗?很抱歉回复太晚,感谢您的建议,将UserState属性转换为Uri&重载DownloadStringAsync工作得很好(看不到UserToken)谢谢你的建议,将UserState属性转换为Uri&重载DownloadStringAsync可以完美地工作(看不到UserToken)谢谢