C #: получение тела сообщения из HTTP 409 Conflict response - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить тело сообщения от веб-службы (расположенной по адресу http://www.ekkuli.net/conflict_call.php),, которая возвращает тег «Transfer-Encoding: chunked» и 409 Conflict response, используя следующий код:

String webAddr = "http://www.ekkuli.net/conflict_call.php";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.Accept = "application/json";
httpWebRequest.KeepAlive = true;

try {
    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
        String myJson = "{ \"method\" : \"just testing\" }";
        streamWriter.Write(myJson);
        streamWriter.Flush();
     }

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
         var responseText = streamReader.ReadToEnd(); 
      }
} catch (WebException ex) { // Catch 409 Conflict response
    try {
        // Try to get message body from 409 Response
        var s = ex.Response.GetResponseStream();
        var sr = new System.IO.StreamReader(s);
        var content = sr.ReadToEnd(); // THIS THROWS AN EXCEPTION
    } catch (Exception excep) {
        // Exception! Error getting response stream (ReadAsync): ReceiveFailure Value cannot be null. 
    }
}

Есть ли способ получить тело ответа из 409 Conflict -response, когда сервер возвращает заголовок Transfer-encoding: Chuncked? Если этот заголовок отключен и вместо него возвращается Content-length, все работает нормально, но в этом случае я не могу изменить код сервера.

Та же проблема возникает при попытке использовать RestSharp -library (она возвращает код состояния 0 и тело сообщения 0).

Я использую Mono (для Mac).

...