Отсутствует шаблон с заголовком ODataClient — Location

#.net-core #odata #blazor #blazor-client-side #odata-connected-service

#.net-core #odata #блейзор #блейзор на стороне клиента #odata-connected-service

Вопрос:

Я создаю клиентское приложение Blazor с помощью Microsoft.OData.Клиент. Когда я создаю новый объект, подобный этому:

             var dataServiceContext = this.ClientFactory.CreateClient<Container>(new Uri("http://localhost:5000/odata"));
            var newAsset = new CreateAssetDto()
            {
                TechnicalName = "from_client_4",
                DisplayNameFormat = "format from client",
                Icon = "client/icon",
                InheritedFrom = Guid.NewGuid(),
                IsActive = true,
                Translation = new AssetTranslationDto
                {
                    Title = "Client Asset",
                    Language = "en",
                    Description = "This is asset from client"
                }
            };

            dataServiceContext.AddToAssets(newAsset);
            await dataServiceContext.SaveChangesAsync();
  

Я получаю исключение, в котором указано, что в ответе на этот POST-запрос отсутствует заголовок местоположения. Когда я запускаю fiddle, чтобы посмотреть, что происходит, я вижу, что на самом деле он сделал 2 запроса.введите описание изображения здесь

Первый запрос — POST, но не включает тело и получает 204 ответа. Второй запрос — это тот, который фактически содержит данные, создающие новый ресурс, и ответ содержит заголовок местоположения, как и должно быть.

Я предполагаю, что клиент OData жалуется на отсутствие заголовка местоположения в ответе на первый запрос (поскольку ответ на второй запрос содержит заголовок). Но почему он даже делает первый запрос?

Есть идеи, как справиться с этой проблемой?

Ответ №1:

Возможно, что первый запрос является предполетным запросом, отправленным браузером. Но обычно предполетные запросы CORS отправляются с использованием метода OPTIONS, а не POST. Итак, этот случай любопытен.

Я участвую в проекте, но у меня недостаточно репутации, чтобы добавлять комментарии здесь, чтобы получить разъяснения. Не могли бы вы создать проблему в https://github.com/OData/odata.net ?

Комментарии:

1. Вы правы. На самом деле это был запрос параметров, а не POST. Мой плохой. Но в любом случае это не решает мою проблему. И еще одна вещь, я использую ODataClient версии 7.6.4, потому что есть некоторые критические изменения по сравнению с версией 7.7.0, которые не работают с blazor на стороне клиента

2. Я создал проблему github.com/OData/odata.net/issues/1927