【发布时间】:2013-08-13 14:18:42
【问题描述】:
我是否误用了 HttpClient 类。我正在尝试测试图像的 HTTP 状态,但它似乎根本没有执行。我有一个复杂对象的列表,所以我想对所有图像 url 运行测试,以查看哪些 url 被破坏:
var client = new HttpClient();
var tasks = ObjectViewModel.Select(a => a.UserUrl).Select(url =>
client.GetAsync(url).ContinueWith(t =>
{
var response = t.Result;
if (!response.IsSuccessStatusCode)
url = "/Content/Images/MissingPic.png";
}));
我最初是在这样的 foreach 循环中这样做的:
foreach(var Model in ObjectViewModel)
{
Model.UserUrl= Model.UserUrl.GetHttpRequest() ? Model.UserUrl:
"/Content/Images/MissingImage.png";
//Model.state= Model.state.ValidName();// this line is something seperate
//Model.property= Model.state.propertyCheck();// this line is something seperate
}
public static bool GetHttpRequest(this string s)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest
.Create(s);
webRequest.AllowAutoRedirect = false;
HttpStatusCode responseStatusCode;
try
{
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
responseStatusCode = response.StatusCode;
}
catch (WebException we)
{
responseStatusCode = ((HttpWebResponse)we.Response).StatusCode;
}
if (responseStatusCode.ToString() == "OK")
return true;
else
return false;
}
效果很好,但完成所有项目大约需要 5 到 7 秒,因为它们都是单独运行的,这对于响应 UI 的请求来说非常长。
【问题讨论】:
标签: c# asynchronous asp.net-mvc-2 httpclient