Ответ Эрика не работает на Windows Phone как есть. Следующее:
class WebClientEx : WebClient
{
private WebResponse m_Resp = null;
protected override WebResponse GetWebResponse(WebRequest Req, IAsyncResult ar)
{
return m_Resp = base.GetWebResponse(Req, ar);
}
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 (не изменено). Таким образом, резерв предполагает, что если код состояния каким-то образом недоступен, по крайней мере, он является ошибочным.