【问题标题】:How to validate parameters sent to an Azure function?如何验证发送到 Azure 函数的参数?
【发布时间】:2019-10-16 07:10:03
【问题描述】:

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

【问题讨论】:

    标签: .net-core azure-functions modelstate


    【解决方案1】:

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

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

    【讨论】:

    • 这与 azure 函数有什么关系?
    • 嗨,我不确定你的问题。使用 webapi,您可以验证上下文,它是内置的。但是天蓝色的功能没有这样的东西。让我知道它是否回答了您的问题。如果不能,您能否提供更多详细信息?
    【解决方案2】:

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

    【讨论】:

    • 感谢您的评论。我很快阅读了这篇文章,是的,这也有帮助。它比我的解决方案更干净:)。
    猜你喜欢
    • 2021-12-08
    • 2022-01-04
    • 1970-01-01
    • 2022-06-18
    • 2014-03-13
    • 1970-01-01
    • 2018-08-22
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多