Ответ Эрика не работает на Windows Phone как есть.Следующее делает:
class WebClientEx : WebClient
{
private WebResponse m_Resp = null;
protected override WebResponse GetWebResponse(WebRequest Req, IAsyncResult ar)
{
try
{
this.m_Resp = base.GetWebResponse(request);
}
catch (WebException ex)
{
if (this.m_Resp == null)
this.m_Resp = ex.Response;
}
return this.m_Resp;
}
public HttpStatusCode StatusCode
{
get
{
if (m_Resp != null && m_Resp is HttpWebResponse)
return (m_Resp as HttpWebResponse).StatusCode;
else
return HttpStatusCode.OK;
}
}
}
По крайней мере это делает при использовании OpenReadAsync
;для других xxxAsync
методов настоятельно рекомендуется тщательное тестирование.Фреймворк вызывает GetWebResponse где-нибудь вдоль пути кода;все, что нужно сделать, это захватить и кэшировать объект ответа.
В этом фрагменте запасной код равен 200, поскольку подлинные ошибки HTTP - 500, 404 и т. д. - в любом случае сообщаются как исключения.Цель этого трюка - захватить коды без ошибок, в моем конкретном случае 304 (не изменено).Таким образом, запасной вариант предполагает, что если код состояния как-то недоступен, по крайней мере, он не ошибочен.