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 ;
}