HTTP-отправка как данных JSON, так и значений строки запроса в веб-API в dotNet core 3.0 - PullRequest
0 голосов
/ 05 ноября 2019

Справочная информация:

Я пытаюсь реализовать веб-API с использованием dotNet core 3.0, чтобы он принимал POST-редактируемые данные JSON.

Я достиг этого, но есть дополнительная сложность: система, которая отправляет данные JSON, обеспечивает аутентификацию через ключ API, который появляется в строке запроса. (На самом деле - он предоставляет 3 значения строки запроса: ключ API, временную метку и MAC-хэш, основанный на общем секрете, первых двух значений.)

(я бы предпочел, чтобы оно появилось в HTTPзаголовок как значение X-Api-Key, так как ранее я реализовал защиту с помощью этого метода - но у меня нет выбора)

Данные JSON на самом деле представляют собой список объектов одного типа, поэтомупривязка к методу контроллера выглядит следующим образом:

    [HttpPost]
    [ProducesResponseType(StatusCodes.Status201Created)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType(StatusCodes.Status500InternalServerError)]
    public IActionResult AddMyStuffBatches(List<MyStuffBatch> batches) 

Значения аутентификации, отображаемые в строке запроса, на самом деле не имеют ничего общего с моделью - они не связаны с данными, загруженными процессом. Поэтому как таковые они не должны появляться в списке batches или как свойство определенного экземпляра MyStuffBatch.

Поэтому вопрос: Как проектировать контроллеркоторая имеет дело с деталями ключа API аутентификации, переданными в строке запроса, в то время как (при условии, что передан действительный ключ API и т. д.) все еще обрабатывается полезная нагрузка JSON, как и раньше?

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете использовать [FromQuery] в вашем посте для связывания параметров из строки запроса, например:

URL:

POST https://localhost:5001/weatherforecast?timestamp=2019-11-06T09:27:36.000Z&apiKey=secretkey

Действие:

[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public IActionResult AddMyStuffBatches(List<MyStuffBatch> batches,[FromQuery] string timestamp, [FromQuery] string apiKey)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...