Разбор multipart / смешанных ответов http в c# с помощью. Net Framework HttpClient - PullRequest
0 голосов
/ 04 августа 2020

Я не могу найти способ правильно обрабатывать составные / смешанные ответы от службы REST. Приложение представляет собой веб-страницу ASP. Net в c#, использующую. Net Framework 4.8, вызывающую бэкэнд уровня сервиса SAP Hana.

Пример ответа, который я получаю от сервера:

HTTP/1.1 202 Accepted
Date: Tue, 04 Aug 2020 08:01:08 GMT
Server: Apache/2.4.34 (Unix)
DataServiceVersion: 3.0
Content-Length: 403
Content-Type: multipart/mixed;boundary=batchresponse_Iwe0IXB4-c5Xl-DcVn-S0rF-BFqXAdB6AFU8
Vary: Accept-Encoding

--batchresponse_Iwe0IXB4-c5Xl-DcVn-S0rF-BFqXAdB6AFU8
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8
Content-Length: 129

{
   "error" : {
      "code" : -1,
      "message" : {
         "lang" : "en-us",
         "value" : "BadFormat"
      }
   }
}
--batchresponse_Iwe0IXB4-c5Xl-DcVn-S0rF-BFqXAdB6AFU8--

( Я намеренно отправляю запрос, который возвращает ошибку из службы Rest , и я хочу проанализировать содержимое ошибки json из этого составного ответа. То же самое, что я будет работать с ответами на правильный запрос, которые также возвращают многочастный смешанный контент.)

Я загрузил библиотеку Microsoft.As pNet .WebApi.Client, которая должна обрабатывать Multipart.

Я использую следующий код:

using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
...

HttpClient client;  
// initialized here
...
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "$batch");
// Here I build the multipart-mixed request using MultipartContent and StringContent objects, which works ok
...

var response = client.SendAsync(request).Result;
response.EnsureSuccessStatusCode();
if (response.Content.IsMimeMultipartContent())
{
    var multipart = response.Content.ReadAsMultipartAsync().Result;  // this throws the exception: Unexpected end of MIME multipart stream. MIME multipart message is not complete.
}

Я не понимаю, почему возникает это исключение и как его избежать.

ОБНОВЛЕНИЕ (5 августа 2020 г.): Кто-то все еще может захотеть ответить для справки в будущем, в любом случае я написал свой собственный составной / смешанный синтаксический анализатор.

...