如何验证发送到 Azure 函数的参数?

How to validate parameters sent to an Azure function?

我是 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; }
}

我创建了一个简单的扩展来验证对象并设置一个包含错误集合的输出参数。

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);
    }

我认为您还可以为此编写一个自定义属性,实现 OnExecutingAsync 并在其中执行验证,请参阅 https://www.c-sharpcorner.com/article/do-you-know-azure-function-have-function-filters/