Передача параметров запроса Odata в теле запроса - PullRequest
0 голосов
/ 09 июля 2020

В соглашениях об URL-адресах Odata 4.01 говорится, что для GET запросов с очень длинными фильтрами вы можете добавить /$query к пути ресурса URL-адреса, используйте команду POST вместо GET и передайте часть URL-адреса с параметрами запроса в теле запроса. Если я попробую это с моей службой, я верну 404.

Нужно ли вручную создавать конечную точку /$query в серверной части, или это то, о чем odata должна заботиться прозрачно? Я искал как сумасшедший, но не могу найти ничего о том, как это реализовать.

1 Ответ

0 голосов
/ 10 августа 2020

Один из способов избежать этого - заключить запрос в пакетный запрос

Вы можете разрешить длинный URL-адрес с помощью $ batch query.

Хороший пост от Хассана Хабиба https://devblogs.microsoft.com/odata/all-in-one-with-odata-batch//

Все, что вам нужно сделать, это:

  1. Разрешить пакетирование в Startup.cs

         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
         {  
             app.UseODataBatching(); <---- (1)
             app.UseEndpoints(endpoints =>
             {
                 endpoints.MapControllers();
                 endpoints.Select().Filter().Expand().OrderBy();
                 endpoints.MapODataRoute(
                     routeName: "api",
                     routePrefix: "api",
                     model: GetEdmModel(),
                     batchHandler: new DefaultODataBatchHandler()); <---- (2)
             });
         }
    
  2. Запросить пакетный запрос с телом, содержащим длинный URL-запрос

POST http://localhost/api/ $ batch Content-Type: multipart / смешанный; border = batch_mybatch

тело:

--batch_mybatch
Content-Type: application/http
Content-Transfer-Encoding: binary

GET http://localhost/api/students/735b6ae6-485e-4ad8-a993-36227ac82851  HTTP/1.1   <--long url requst
OData-Version: 4.0
OData-MaxVersion: 4.0
Accept: application/json;odata.metadata=minimal
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services

--batch_mybatch
...