Как проверить параметры, отправленные в функцию Azure? - PullRequest
0 голосов
/ 30 мая 2019

Я новичок в Azure Function.Я привык кодировать с WebApi, где у меня есть ActionExecutingContext , который помогает проверить ModelState.Я создал ActionFilterAttribute , который делает это автоматически:

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class ValidateModelStateAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            //Do something
        }
    }
}

Как я могу сделать это или что-то подобное с функцией Azure?

Например, с этим DTO с именемсвойство установлено как Обязательное:

public class TestDto
{
    [Required]
    public string Name { get; set; }
}

1 Ответ

1 голос
/ 30 мая 2019

Я создал простое расширение, которое проверяет объект и устанавливает выходной параметр с набором ошибок.

public static class ObjectExtensions
{
    public static bool IsValid(this object o, out ICollection<ValidationResult> validationResults)
    {
        validationResults = new List<ValidationResult>();
        return Validator.TryValidateObject(o, new ValidationContext(o, null, null), validationResults, true);
    }
}

Итак, в моей функции Azure вот что у меня есть:

    [FunctionName("Create")]
    public async Task<IActionResult> CreateAsync(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "test/")] TestDto dto,
        CancellationToken cts,
        ILogger log)
    {
        if (!dto.IsValid(validationResults: out var validationResults))
        {
            return new BadRequestObjectResult($"{nameof(TestDto)} is invalid: {string.Join(", ", validationResults.Select(s => s.ErrorMessage))}");
        }
        var result = await _testManager.CreateAsync(new Test() { Name = dto.Name }, cts);
        return new OkObjectResult(result);
    }
...