2017-01-19 9 views
1

Мне нравится, как в WebAPI как вы просто поместите определенную модель в качестве параметра в методе контроллера. Я переключение на OData и каждый пример я нашел работу со структурой данных является определением его в MODELBUILDERОбъявить класс как параметры для действия OData в C#

var action = builder.Action("MyAction").ReturnsCollection<int>(); 
action.Parameter<int>("ProgramId"); 
action.Parameter<int>("BrandId"); 
action.Parameter<int>("StoreId"); 
action.Parameter<OperationStatus>("Status"); 

, а затем в контроллере необходимо вручную получить эти значения из словаря ODataParameter. Я нахожу это утомительным. Также в способе WebAPI вы можете ловить ошибки во время компиляции или VisualStudio intelisense и выполнять проверки с аннотациями.

Существуют ли другие способы передачи параметров в действие? Что-то более похожее на «perks» WebAPI

ответ

0

У вас может быть пользовательский DTO в качестве параметра для OdataAction. Например, код для регистрации будет, как:

var action = builder.Action("MyAction"); 
action.Parameter<OperationStatus>("Status"); 
action.ReturnsCollection<int>("Results"); 

и полезная нагрузка JSon для запроса будет как:

{ 
    "Status": { 
     "Property1":"value", 
     "Property2":"value" 
    } 
} 

действий декларации в контроллере:

[HttpPost] 
[ODataRoute("MyAction")] 
public async Task<IHttpActionResult> MyAction(ODataActionParameters parameters) 
{ 
    OperationStatus status; 
    if (!parameters.TryGetValue("Status",out status)) 
    { 
     return BadRequest("Missing parameter Status"); 
    } 
} 
+0

Таким образом, простой , Хотя он по-прежнему использует словарь, для меня достаточно DTO. Кроме того, использование параметра out должно быть назначено объекту, а затем должно быть выполнено на OperationStatus. – Vector