Azure Функции привязки модели в C# - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу использовать Azure Функции и автоматически анализировать модели, как в типичном ASP. NET проекте WebAPI. Итак, я пишу:

[FunctionName("StartJob")]
public async Task<IActionResult> Start(
    [HttpTrigger(AuthorizationLevel.Function, "Post", Route = "v1/job")] StartJobRequestModel model)
{
    this.logger.LogInformation("StartJob function has been entered.");
}

public class StartJobRequestModel
{
    [JsonRequired]
    public string TenantId { get; set; }
    ....
}

Итак, вы ожидаете, что если вы не предоставите обязательное поле TenantId, основанное на этом коде, во время скрытой обработки JSON десериализация программы не должна даже ввести функцию тела. Но он делает следующее:

Журналы json ошибка десериализации

[10/10/2020 10:59:14 AM] Запрос успешно совпал с маршрутом с именем 'StartJob' и шаблон 'api / v1 / job'

[10/10/2020 10:59:14 AM] JSON входной форматтер выдал исключение.

[2/10/2020 10 : 59: 14 AM] Newtonsoft. Json: Обязательное свойство 'tenantId' не найдено в JSON. Путь '', строка 16, позиция 1.

[10/10/2020 10:59:14 AM] Выполнение StartJob (Reason = 'Эта функция была вызвана программно через API хоста.', Id = 22be443b-9a70-4570-8a30-1cc9b8062f1b)

[10/10/2020 10:59:16 AM] Функция StartJob была введена.

И продолжить работу без каких-либо проблемы с неожиданными исключениями после получения неожиданной модели ...

Вопросы:

  1. Это нормальное поведение?
  2. Может быть, мне нужно указать какой-то конкретный c параметр в конфиге проекта или в Startup.cs?
  3. ошибка Microsoft?
  4. ???
  5. Не прибыль?

Спасибо.

1 Ответ

0 голосов
/ 10 февраля 2020

Не знаю, какая у вас версия NewtonSoft. Json, но обычно я использую атрибут JsonProperty, а не атрибут JsonRequired, и он работает должным образом:

public class StartJobRequestModel
{
    [JsonProperty(Required = Required.Always)]
    public string TenantId { get; set; }
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...