Почему моя OData 4 Batch не получает тело запроса последнего запроса - PullRequest
0 голосов
/ 12 марта 2019

Я работаю над API ASP.NET Core 2.2 с использованием Microsoft.AspNetCore.OData NuGet v7.1.0 и пытаюсь протестировать пакет OData с помощью Postman v7.0.5.

Проблема, с которой я столкнулся, заключается в том, что в моем пакете всегда не отображаются данные последнего запроса POST. В ответ я получаю «201 Created» для каждого поста, кроме последнего, который возвращает «400 Bad Request», потому что он не собирает данные в последнем теле запроса.

Вот соответствующий раздел моего Startup.cs, где я включаю пакетную обработку OData;

app.UseODataBatching();
app.UseMvc(routeBuilder =>
{
    routeBuilder
        .MapODataServiceRoute("ODataRoutes", "api/v1",
             modelBuilder.GetEdmModel(app.ApplicationServices), 
             new DefaultODataBatchHandler());
});

В Почтальоне у меня есть POST-запрос к

{{url}}/api/v1/$batch

и в разделе Запрос -> Заголовки у меня установлен заголовок Content-Type на

multipart/mixed; boundary=batch_abbe2e6f-e45b-4458-9555-5fc70e3aebe0

Тело запроса имеет значение «Raw» и «Text»

Ниже приведено тело запроса;

--batch_abbe2e6f-e45b-4458-9555-5fc70e3aebe0
Content-Type: application/http
Content-Transfer-Encoding: binary

POST /api/v1/AddressComplianceCode HTTP/1.1
OData-Version: 4.0
Content-Type: application/json
Accept: application/json;odata.metadata=minimal

{
  "Code": "Z1",
  "Description": "Test Batch Z1",
  "Active": true
}

--batch_abbe2e6f-e45b-4458-9555-5fc70e3aebe0
Content-Type: application/http
Content-Transfer-Encoding: binary

POST /api/v1/AddressComplianceCode HTTP/1.1
OData-Version: 4.0
Content-Type: application/json
Accept: application/json;odata.metadata=minimal

{
  "Code": "Z2",
  "Description": "Test Batch Z2",
  "Active": true
}

--batch_abbe2e6f-e45b-4458-9555-5fc70e3aebe0
Content-Type: application/http
Content-Transfer-Encoding: binary

POST /api/v1/AddressComplianceCode HTTP/1.1
OData-Version: 4.0
Content-Type: application/json
Accept: application/json;odata.metadata=minimal

{
  "Code": "Z3",
  "Description": "Test Batch Z3",
  "Active": true
}

--batch_abbe2e6f-e45b-4458-9555-5fc70e3aebe0
Content-Type: application/http
Content-Transfer-Encoding: binary

POST /api/v1/AddressComplianceCode HTTP/1.1
OData-Version: 4.0
Content-Type: application/json
Accept: application/json;odata.metadata=minimal

{
  "Code": "Z4",
  "Description": "Test Batch Z4",
  "Active": true
}

--batch_abbe2e6f-e45b-4458-9555-5fc70e3aebe0--

А вот и ответ;

--batchresponse_f2c84aaf-dc39-4f20-8da0-881f402436fa
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 201 Created
Location: https://localhost:44331/api/v1/AddressComplianceCode('Z1')
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
OData-Version: 4.0

{"@odata.context":"https://localhost:44331/api/v1/$metadata#AddressComplianceCode/$entity","Code":"Z1","Description":"Test Batch Z1","MarkedForRetirement":false,"RetirementDate":null,"LastModifiedDate":"2019-03-12T10:19:20.9434728-04:00","LastModifiedBy":null,"CreatedDate":"2019-03-12T10:19:20.9434728-04:00","CreatedBy":null,"Delete":false,"Active":true}
--batchresponse_f2c84aaf-dc39-4f20-8da0-881f402436fa
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 201 Created
Location: https://localhost:44331/api/v1/AddressComplianceCode('Z2')
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
OData-Version: 4.0

{"@odata.context":"https://localhost:44331/api/v1/$metadata#AddressComplianceCode/$entity","Code":"Z2","Description":"Test Batch Z2","MarkedForRetirement":false,"RetirementDate":null,"LastModifiedDate":"2019-03-12T10:19:21.2241031-04:00","LastModifiedBy":null,"CreatedDate":"2019-03-12T10:19:21.2241031-04:00","CreatedBy":null,"Delete":false,"Active":true}
--batchresponse_f2c84aaf-dc39-4f20-8da0-881f402436fa
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 201 Created
Location: https://localhost:44331/api/v1/AddressComplianceCode('Z3')
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
OData-Version: 4.0

{"@odata.context":"https://localhost:44331/api/v1/$metadata#AddressComplianceCode/$entity","Code":"Z3","Description":"Test Batch Z3","MarkedForRetirement":false,"RetirementDate":null,"LastModifiedDate":"2019-03-12T10:19:21.5068813-04:00","LastModifiedBy":null,"CreatedDate":"2019-03-12T10:19:21.5068813-04:00","CreatedBy":null,"Delete":false,"Active":true}
--batchresponse_f2c84aaf-dc39-4f20-8da0-881f402436fa
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 400 Bad Request
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
OData-Version: 4.0

{"error":{"code":"","message":"The input was not valid.","details":[{"code":"","message":"The input was not valid."}]}}
--batchresponse_f2c84aaf-dc39-4f20-8da0-881f402436fa--

Независимо от того, сколько разделов POST я добавляю в запрос (я проверял 2, 3 и 4), последний запрос всегда не может передать значения тела запроса.

Я просмотрел расширенный учебник Batch на сайте www.odata.org , а также все соответствующие сообщения SO, которые я смог найти. Я также попробовал страницы Github , используя фильтр;

is:issue is:open batch 

Все пока безуспешно.

Что мне здесь не хватает?

...