2016-03-08 2 views
0

Из примера на другом сайте:OData маршрутизации и действия

В WebApiConfig.cs

EntitySetConfiguration<ContactType> contactType = builder.EntitySet<ContactType>("ContactType"); 
var actionY = contactType.EntityType.Action("ChangePersonStatus"); 
actionY.Parameter<string>("Level"); 
actionY.Returns<bool>(); 

var changePersonStatusAction = contactType.EntityType.Collection.Action("ChangePersonStatus"); 
changePersonStatusAction.Parameter<string>("Level"); 
changePersonStatusAction.Returns<bool>(); 

В ContactTypeController

[HttpPost] 
[ODataRoute("Default.ChangePersonStatus")] 
public IHttpActionResult ChangePersonStatus(ODataActionParameters parameters) 
{ 
    if (ModelState.IsValid) 
    { 
    var level = parameters["Level"]; 
    // SAVE THIS TO THE DATABASE OR WHATEVER.... 
    } 
    return Ok(true); 
} 

Теперь действие можно назвать:

For the Entity: 
http://localhost:51902/odata/ContactType(5)/Default.ChangePersonStatus 
For the Entity Collection: 
http://localhost:51902/odata/ContactType/Default.ChangePersonStatus 

Я не понимаю, как мы получаем Id = 5 из ContactType в акции и сохранить что-то в базу данных с помощью этого идентификатора при использовании ..odata/ContactType (5) /Default.ChangePersonStatus ссылка

ответ

1

Для Entity Коллекция:

http://localhost:51902/odata/ContactType/Default.ChangePersonStatus 

Ваш метод в контроллере должен быть следующим:

[HttpPost] 
[ODataRoute("ContactType/Default.ChangePersonStatus")] 
public IHttpActionResult ChangePersonStatus(ODataActionParameters parameters) 
{ 
    ... 
} 

для объекта:

http://localhost:51902/odata/ContactType(5)/Default.ChangePersonStatus 

Ваш метод в контроллере должен быть следующим:

[HttpPost] 
[ODataRoute("ContactType({key})/Default.ChangePersonStatus")] 
public IHttpActionResult ChangePersonStatus(int key, ODataActionParameters parameters) 
{ 
    ... 
} 

ключ будет иметь ценность ;

+0

Я протестировал эти ссылки в браузере, и оба они перешли к действию, которое я написал. Означает ли это, что (5) опущено из URL-адреса для объекта? –

0

Для ссылки на один объект, вам необходимо включить [FromODataUri] до ключа:

[HttpPost] 
[ODataRoute("ContactType({key})/Default.ChangePersonStatus")] 
public IHttpActionResult ChangePersonStatus([FromODataUri] int key, ODataActionParameters parameters) 
{ 
    // Code 
} 

Теперь вы должны быть в состоянии получить доступ к идентификатору в методе.

Смежные вопросы