2016-08-28 2 views
0

У меня есть REST интерфейс конечной точки, какКак выбрать действие ASP.NET Core из свойства JSON в теле?

POST/деталей/12345/действия

я использовать общие действия суб коллекции, которые будут применяться, чтобы применить изменения к 12345, которые не легко отображенные на контента или прямых других подкатегорий.

Мой вопрос следующий: Поскольку может быть несколько разных типов действий, я идентифицирую действие с помощью свойства JSON содержимого загруженного документа.

Как выбрать действие частью тела JSON запроса. Есть ли что-то можно, как ...

[Route("api/v1/items") 
public class ItemsController : Controller 
{ 
    [HttpPost("{id}/actions")] 
    [CheckJsonBody("type", "ActionA")] 
    public ActionResult DoActionA(int id, ActionA a) 
    { 
     // do something 
    } 

    [HttpPost("{id}/actions")] 
    [CheckJsonBody("type", "ActionB")] 
    public ActionResult DoActionB(int id, ActionB b) 
    { 
     // do something 
    } 
} 

Запрос будет выглядеть ...

{ 
    "type": "ActionA", 
    "abc": "xyz" 
} 

откапывал я себя вверх в код до Microsoft.AspNetCore.Mvc.ActionConstraints.ActionMethodSelectorAttribute (GitHub).

Однако, начиная с этого момента, я немного потерял достижение высокопроизводительного решения. Нужно ли мне декодировать тело или что-то, что уже сделано в это время, оценивается ограничение?

ps: И да, я знаю, что смогу обработать их в одном действии и переключиться на свойство типа.

ответ

0

Член команды ASP.NET был настолько дружелюбен, чтобы направить меня на ответ: В ActionMethodSelectorAttribute вы можете прочитать тело в поток памяти, прочитать до свойства фильтра выбора. Затем вы ищите поток памяти в ноль и заменяете его в запросе (для более поздней привязки модели). Вы можете кэшировать значение критериев в HttpContext.Items, чтобы ускорить его, если вы используете одно и то же свойство для нескольких действий.

+0

Любой код или пример о ваших выводах? – CSharper

+0

Нет. Я никогда не реализовывал это. – Thomas

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