2015-12-28 9 views
1

В моем веб-api я использую методы POST, поэтому клиент может отправлять функциональные параметры с помощью JSON. Однако я заметил, что наличие модели (dto) для этих параметров как на клиенте, так и на сервере не имеет смысла. Или это?Извлечение параметров в методе POST API WEB

Поскольку я использую POST, создается объект модели для обязательной привязки? Иногда я действительно имею дело с сущностью, такой как Клиент, и это имеет смысл, но когда я имею дело с 3 случайными параметрами, мне действительно нужно создать модель (dto), чтобы я мог получить данные в функцию POST?

Вот моя функция POST в моем WEB API:

[HttpPost, Route("GetAccountInformation")] 
public IActionResult RetrieveAccountInformation(GetAccountInformationParamsObj myParams) 
{ 
    var retVal = _repository.GetAccountInformation(myParams.StartDate, myParams.EndDate, myParams.Count) 

    return Ok(retVal); 
} 

Вот пример того, что клиент будет отправлять в теле POST:

{ 
    "StartDate":"10-25-2015", 
    "EndDate":"11-25-2015", 
    "Count":20 
} 

Было бы замечательно, если следующее будет работать, но значения параметров в конце концов остаются пустыми при подаче запроса:

[HttpPost, Route("GetAccountInformation")] 
    public IActionResult RetrieveAccountInformation([FromBody] DateTime startDate, DateTime endDate, int count = 0) 
    { 

    } 
+0

У меня возникли проблемы с тем, что вы на самом деле спрашиваете. Использование реальной модели не требуется * для любого взаимодействия с HTTP, это просто способ семантической группировки и понимания объектов в вашем домене. Делает ли это 'params' вещь даже для компиляции? Я бы подумал, что это зарезервированное ключевое слово. Кроме того, вы говорите о POST-запросах, но ваш метод «Get». Можете ли вы уточнить, что вы спрашиваете? – David

+0

Приносим извинения за имя params и путаницу с именем функции. Я обновил все, чтобы иметь больше смысла. Я хотел знать, требуется ли использование реальной модели для взаимодействия HTTP POST. Если нет, то как клиент может отправить мне параметры JSON, и я получаю их без использования реальной модели? Например: клиент является приложением vb6, а разработчик приложения VB6 хочет вызвать GetAccountInformation в моем веб-интерфейсе. Разработчик отправит JSON, который содержит 3 параметра, и я верну список результатов в JSON. –

+0

Вы можете * иметь возможность иметь только отдельные типы значений в качестве параметров для вашего серверного метода вместо модели. (По крайней мере, MVC допускает это. Семантика WebAPI может сделать ее немного странной.) Но представляется более разумным просто упорядочивать значения в классе в любом случае. – David

ответ

2

Вам не нужно делать, что вы пытаетесь сделать не оправдывает POST, просто пытаются получить данные из URI с помощью Аттрибут[FromUri] так:

[HttpGet, Route("GetAccountInformation")] 
public IActionResult Get([FromUri]GetAccountInformationParamsObj @params) 
{ 
    var retVal = _repository.GetAccountInformation(@params.StartDate, @params.EndDate, @params.Count) 

    return Ok(retVal); 
} 

и сделать запрос, как это:

/GetAccountInformation? StartDate = 10-25-2015 & EndDate = 11-25-2015 & Count = 20

+0

Я бы согласился, что это идеальный сценарий использования GET, но в качестве дизайнерского решения мы решили создать веб-API, чтобы он получал все POSTS.Прежде всего потому, что существует ограничение на количество параметров строки запроса, которые вы можете иметь, и потому, что мы будем отправлять конфиденциальные данные в качестве параметров. –

+0

Конечно, но для этого он решает, нет ?, используйте POST для этого не семантично. _ Любому сообщению HTTP-запроса разрешено содержать тело сообщения и, следовательно, должно анализировать сообщения с учетом этого. Семантика сервера для GET ограничена тем, что тело, , если оно есть, не имеет семантического значения для запроса. Требования от разбора не зависят от требований по семантике метода. Итак, да, вы можете отправить тело с GET, и нет, это никогда не полезно , чтобы сделать это ._ –

+0

Знаете ли вы, что, по крайней мере, возможно привязать параметры непосредственно от соответствия JSON в теле при использовании POST ? См. Мой последний пример выше. –

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