2015-04-27 3 views
0

Я хочу, чтобы пользовательское действие было добавлено в мой контроллер OData для добавления объекта. Я могу сделать это в стандартном методе Post, поставляемом в контроллере OData, но у меня есть собственный код, который будет перезаписан, когда я обновляю контроллер из базы данных, если я добавлю ассоциацию.Параметр Null в OData Custom Action

Вот пользовательский метод Я добавил

[HttpPost] 
public IHttpActionResult CreateValidCombination(ValidCombination validCombination) 
{ 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     return Ok(); 
} 

Заголовок запроса совпадает со стандартным методом поста

POST http://localhost:20152/Admin/odata/ValidCombinations/fn.CreateValidCombination HTTP/1.1 
Accept: */* 
Content-Type: application/json 
Referer: http://localhost:20152/Admin/index.html 
Accept-Language: en-CA,en;q=0.5 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like  Gecko 
Connection: Keep-Alive 
Content-Length: 284 
DNT: 1 
Host: localhost:20152 
Pragma: no-cache 

Действия настроенным в WebApiConfig.cs, как

builder.EntityType<ValidCombination>().Collection 
      .Action("CreateValidCombination") 
      .Returns<IHttpActionResult>(); 

Проблема заключается в том, что стандартный метод OData Contoller Post получает параметр типа " ValidCombination ", метод customer получает его как null.

Я проверил заголовки и тело запроса в скрипаче и то же самое в обоих случаях. Я даже попытался поставить [FromBody] перед параметром, но безрезультатно. Я пытаюсь получить значение в параметре для моего настраиваемого метода.

С кем сталкивался кто-либо раньше. Есть ли способ, по которому я могу отлаживать, почему параметр не десериализуется должным образом, даже если запрос и тело одинаковы для обоих методов?

ответ

0

Согласно http://odata.github.io/WebApi/#04-07-action-parameter-support, в вашей настраиваемой метод действия, тип параметра должен быть ODataActionParameters вместо ValidCombination, код OData WebAPI находится в github, очень легко отлаживать, вы можете найти множество функциональных тестов тоже.