#.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