gpt4 book ai didi

c# - Azure 函数中的验证过滤器

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:59 30 4
gpt4 key购买 nike

问题

我正在使用流畅的验证进行模型验证,我希望它由 Azure 函数中的 ValidationFilter 完成。我已经在 asp.net 核心应用程序中完成了,但我不知道如何在 azure 函数中完成

代码

我的验证器

using FluentValidation;

namespace MyLocker.Models.Validations
{
public class PortfolioFolderVMValidator : AbstractValidator<PortfolioFolderVM>
{
public PortfolioFolderVMValidator()
{
RuleFor(reg => reg.Title).NotEmpty().WithName("Title").WithMessage("{PropertyName} is required");
RuleFor(reg => reg.UserId).NotEmpty().WithName("UserId").WithMessage("{PropertyName} is required");
}
}
}

验证模型操作过滤器

using System.Collections.Generic;
using System.Linq;
using System.Net;
using Microsoft.AspNetCore.Mvc.Filters;
using MyLocker.Models.Common;

namespace MyLocker.WebAPI.Attributes
{
public sealed class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
var errors = context.ModelState.Keys.SelectMany(key => context.ModelState[key].Errors.Select(error => new ValidationError(key, error.ErrorMessage))).ToList();
context.Result = new ContentActionResult<IList<ValidationError>>(HttpStatusCode.BadRequest, errors, "BAD REQUEST", null);
}
}
}
}

启动

然后像这样将它添加到 startup.cs 类中

 services.AddMvc(opt => opt.Filters.Add(typeof(ValidateModelAttribute)))
.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<PortfolioFileModelValidator>())

我在 azure 函数中尝试过,但里面有不同的类和接口(interface)。

最佳答案

目前,有两种类型的过滤器可以使用 Azure 函数:

  • FunctionInvocationFilterAttribute

    Filter顾名思义,用于在调用目标作业函数时执行PRE和POST处理逻辑。

  • FunctionExceptionFilterAttribute

    只要 Azure 函数抛出异常,就会调用异常过滤器。

但是您可以在 Azure 函数之上编写一个包装器,这将帮助您编写干净的代码。

对于基于包装器的实现,您可以引用下面的代码库:

https://gist.github.com/bruceharrison1984/e5a6aa726ce726b15958f29267bd9385#file-fluentvalidation-validator-cs

您也可以实现管道来验证传递给 azure 函数的数据模型。您可以在下面的 repo 中找到完整的引用资料:

https://github.com/kevbite/AzureFunctions.GreenPipes/tree/master/src/AzureFunctions.GreenPipes

在这 2 种方法中,Wrappers 更简洁、更容易实现。

如果您需要任何其他帮助,请告诉我。

关于c# - Azure 函数中的验证过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57988253/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com