Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从DownloadStringCompletedEventArgs获取错误Uri_C#_Webclient - Fatal编程技术网

C# 从DownloadStringCompletedEventArgs获取错误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

基本上我想记录测试时产生错误的uri,使用调试器我可以找到失败的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)谢谢