Возврат HttpResponseMessage с пакетным ответом - PullRequest
0 голосов
/ 02 марта 2019

У меня есть модульный тест, который я пытаюсь исправить.Все, что мне нужно сделать, это вернуть действительные 200 HttpResponseMessage с пакетным ответом для одного запроса (подойдет 404).Я новичок в OData и имею дело с HTTPMessages в целом.Это то, что я сделал до сих пор, но я не уверен, что это правильный способ делать вещи.Не могли бы вы помочь мне понять, где я могу пойти не так?

            string content = string.Format(
                @"--batch_{0}
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 404 Not Found
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal;odata.streaming=true;charset=utf-8
Content-Length: 42",
batchCode);

            content = content + Environment.NewLine + @"{ .error.:.not_found.,.reason.:.missing.}".
            content = content + Environment.NewLine + Environment.NewLine + string.Format(@"--batch_{0}--", batchCode) + Environment.NewLine;

            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(content, System.Text.Encoding.UTF8, "multipart/mixed")
            };

Ответы [ 2 ]

0 голосов
/ 22 марта 2019
        string batchCode = this.GetBatchCode(requestContent);
        var innerResponse = new HttpMessageContent(new HttpResponseMessage(HttpStatusCode.NotFound));

        MultipartContent batchContent = new MultipartContent("mixed", "batch_" + batchCode);

        innerResponse.Headers.Remove("Content-Type");
        innerResponse.Headers.Add("Content-Type", "application/http");
        innerResponse.Headers.Add("Content-Transfer-Encoding", "binary");

        batchContent.Add(innerResponse);

        var outerResponse = new HttpResponseMessage(HttpStatusCode.OK);
        outerResponse.Content = batchContent;

        return outerResponse;
0 голосов
/ 06 марта 2019
  1. Поскольку это ответ, граница должна быть: --batchresponse_{batchCode}.
  2. Вам не нужно указывать OData-Version в подответах, только в заголовке родительского элемента..
  3. Между заголовками и телом должна быть новая строка (в вашем случае до строки HTTP/1.1 404 Not Found).
  4. Между заголовками и телом должна быть новая строкаответ ребенка (перед строкой с вашим json).

Полное тело ответа может выглядеть примерно так:

--batchresponse_4a21740c-169a-4442-b771-8989207e80e9
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8

{"Some":"Json"}
--batchresponse_4a21740c-169a-4442-b771-8989207e80e9--

Кроме того, json в ответе не 'для меня это выглядит как настоящий json, не уверен, что это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...