Как узнать статус код ответа сервера WebRequest и WebResponse? - C#
Формулировка задачи:
Здрасте! Такой вопросец нагрянул, надо написать функцию обращения к серверу и получения ответа, но если статус код не 200, а например 404 (страница не найдена) приложение вырубается и ругается. Есть функция:
Нашел на каком-то сайтике, как сделать если код не 200 чтобы в Out записывался например "0" или "Bad Response". Спасибо)
private string POST(string Url, string Data)
{
WebRequest req = WebRequest.Create(Url);
req.Method = "POST";
req.Timeout = 100000;
req.ContentType = "application/x-www-form-urlencoded";
byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data);
req.ContentLength = sentData.Length;
Stream sendStream = req.GetRequestStream();
sendStream.Write(sentData, 0, sentData.Length);
sendStream.Close();
WebResponse res = req.GetResponse();
Stream ReceiveStream = res.GetResponseStream();
StreamReader sr = new StreamReader(ReceiveStream, Encoding.UTF8);
//Кодировка указывается в зависимости от кодировки ответа сервера
Char[] read = new Char[256];
int count = sr.Read(read, 0, 256);
string Out = String.Empty;
while (count > 0)
{
String str = new String(read, 0, count);
Out += str;
count = sr.Read(read, 0, 256);
}
return Out;
}Решение задачи: «Как узнать статус код ответа сервера WebRequest и WebResponse?»
textual
Листинг программы
private string POST(string Url, string Data)
{
WebRequest req = WebRequest.Create(Url);
req.Method = "POST";
req.Timeout = 100000;
req.ContentType = "application/x-www-form-urlencoded";
using (Stream sendStream = req.GetRequestStream())
{
byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data);
sendStream.Write(sentData, 0, sentData.Length);
}
try
{
using (WebResponse res = req.GetResponse())
using (Stream receiveStream = res.GetResponseStream())
using (StreamReader sr = new StreamReader(receiveStream, Encoding.UTF8))
{
return sr.ReadToEnd();
}
}
catch (WebException ex) //when (ex.Response != null) // Раскоментировать в C#
{
if (ex.Response == null) throw; // Убрать в C# 6
return null;
}
}