Simple.OData.Client - Невозможно вызвать действие, которое принимает параметр коллекции сущностей

Я получаю сообщение об ошибке "Параметр" wheel "относится к типу Edm" Collection ". Вы не можете вызвать CreateCollectionWriter для параметра, который не относится к типу Edm" Collection "."

Ниже приведены подробности моей настройки:

Служба OData v4 Web API 2.2: я определил действие в классе WheelsController в своем сервисе следующим образом:

public async Task<IHttpActionResult> UpdateWheels(ODataActionParameters   parameters)
{
object value;
parameters.TryGetValue("carId", out value);
int carId= (int)value;
parameters.TryGetValue("wheels", out value)
IEnumerable<Wheel> wheels = (IEnumerable<Wheel>)value;
// logic goes here....
return OK();
}

В файлах WebApiConfig.cs конфигурация Action определяется следующим образом:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Car>("Cars");
builder.EntitySet<Wheel>("Wheels");
var action = builder.EntityType<Wheel>().Collection.Action("UpdateWheels");
action.Parameter<int>("carId");
action.CollectionParameter<Wheel>("wheels");

Я получаю успешный вызов вышеупомянутого действия из расширения RESTClient в браузере FireFox в виде POST-запроса к URL-адресу " http://localhost/Service/Wheels/UpdateWheels" с телом запроса в виде

{"carId":2,
"wheels":[{"Id":1,"Name":"Wheel Front 1","Description":"Front wheel left",   "PositionEnum":"FrontLeft"},
{"Id":2,"Name":"Wheel Front 2","Description":"Front wheel right",   "PositionEnum":"FrontRight"}]
}

Тем не менее, он выдает ошибку, когда я пытаюсь вызвать вышеуказанное действие службы с помощью Simple.OData.Client в клиентском приложении, таком как

public async void TestUpdateWheels(List<Wheel> wheelList)
{
// client is derived from ODataClient from assembly Simple.OData.Client.Core.dll, v4.3.0.0
await client.For<Wheel>()
.Action("UpdateWheels")
.Set(new { carId = 2, wheels = wheelList})
.ExecuteAsync();
}

Сообщение об ошибке: Параметр "wheel" относится к типу Edm "Collection". Вы не можете вызывать CreateCollectionWriter для параметра, который не относится к типу Edm типа "Коллекция".

Как мне успешно вызвать вышеуказанное действие от ODataClient?

2 ответа

Решение

Это оказалось ошибкой в ​​версии 4.3.0 Simple.OData.Client, когда я сообщил об этом на сайте проекта. Для получения подробной информации, перейдите по ссылке https://github.com/object/Simple.OData.Client/issues/117

Новое исправление ошибки версии 4.7.2 для Simple.OData.Client устранило проблему для меня!

Попробуйте таким образом. Это работает для меня в одном из моих проектов.

public async Task<string> TestUpdateWheels(List<Wheel> wheelList)
{
    string getRules = await client.ExecuteActionAsScalarAsync<string>
     ("UpdateWheels", new Dictionary<string, object>
        {
           { "YourParamater", wheelList}

        });
   return getRules ;
}
Другие вопросы по тегам