Возможно ли определить необязательные параметры или передать пустые значения в качестве аргументов в OData v4 в Web API?Опциональный аргумент функции в OData v4 web api
Учитывая это определение функции:
ODataConventionModelBuilder builder
var config = builder.EntityType<model.MyType>()
.Collection
.Function("Myfunction")
.ReturnsCollectionFromEntitySet<model.MyType>("MyType");
config.Parameter<int>("Id");
config.Parameter<string>("SomeString");
и этот контроллер действия:
[HttpGet]
public System.Web.OData.PageResult<model.MyType> MyFunction(int id, string someString)
{
return ...;
}
Я попытался назвать эту функцию эти способы:
odata/MyType/Namespace.MyFunction(Id=123,SomeString='lalal')
Работает отлично odata/MyType/Namespace.MyFunction(Id=123)
дает мне 404 odata/MyType/Namespace.MyFunction(Id=123,SomeString='')
Дает мне 400 с ошибкой «Значение требуется, но не содержится в запросе. odata/MyType/Namespace.MyFunction(Id=123,SomeString=null)
Превосходит, но отправляет строковое значение «Microsoft.OData.Core.ODataNullValue» в параметр SomeString-paramater в действии контроллера. Я ожидал бы получить вместо этого нулевое значение.
Проверено на версиях:
- Microsoft.AspNet.OData v5.4.0
Обновление до Microsoft.AspNet.OData v5.5.0-бета оказалось решить проблему (частично).
Дальнейшее копание доказало, что объект ModelState был недопустимым. Объект modelstate жаловался, что в третьем (?) Аргументе есть ошибка с ключом «someString.String». Ошибка: «Требуется значение, но не присутствует в запросе».
В примере кода, который Fan Ouyang предоставил в https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample, можно легко воспроизвести эту проблему. Просто запустите образец и проверьте унаследованное свойство ModelState ModelState в «CustomerController».
Это похоже на ошибку в asp.net web api. Я изменил логику ModelState, чтобы игнорировать любой ключевой элемент modelstate, который содержит «.», Но это всего лишь обходной путь для основной проблемы.
Пробовал ваши предложения, но это было неудовлетворительно. См. Мой обновленный вопрос. –
Я загружаю свой образец для вас в [github] (https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample), вы можете видеть, как работают SomeString = 'и SomeString = null, и моя примерная версия это V5.5. –
Будет ли это проверено –