7

所以我最近一直在玩 Hotchocolate,我做了一门课,它给了我一个学生名单,但我想有一些验证功能。我真的没有从官方热巧克力网站上找到任何对我有帮助的东西。

学生.cs

public class Student
{
    [GraphQLNonNullType]
    public string Name{ get; set; }
    [GraphQLNonNullType]
    public string LastName{ get; set; }
    [GraphQLNonNullType]
    public string Picture { get; set; }
}

这是我的查询,目前它会返回列表中的所有学生。

学生查询.cs

public class StudentQuery
{
    [UseFiltering]
    [UseSorting]
    public List<Student> GetStudents()
    {
        return MongoDBHelper.LoadRecords<Student>(EMongoCollection.Students);
    }

}

现在我的问题是,如何为学生制定 ValidationRule,例如说学生的名字必须至少有 3 个字符?有人可以为我提供一些例子吗?

提前致谢。

4

2 回答 2

8

HotChocolate 本身没有用于此类输入验证的集成。该框架仅进行 GraphQL 验证。因此检查无效的 GraphQL 查询。(例如错误的类型)

如果你想使用验证,有几个社区库可供选择:

社区库在此处列出: https ://github.com/ChilliCream/hotchocolate/blob/main/COMMUNITY.md

于 2021-01-17T18:10:58.033 回答
0

除了 3rd 方库.. 我们可以编写一个自定义中间件来处理从服务输出的数据的数据验证......

中间件示例代码

public class OutputValidationMiddleware
{
    private readonly FieldDelegate next;
    private readonly ILogger<OutputValidationMiddleware> logger;

    public OutputValidationMiddleware(
        FieldDelegate next,
        ILogger<OutputValidationMiddleware> logger)
    {
        this.next = next;
        this.logger = logger;
    }

    public async Task InvokeAsync(IMiddlewareContext context)
    {
        await next(context).ConfigureAwait(false);

        
        if (context.Result != null && context.Result is IValidatable)
        {
            var validationErrors = (context.Result as IValidatable).Validate();
            foreach (var err in validationErrors)
            {
                logger.LogWarning(err);
            }
        }

        return;
    }
}

现在您的模型需要实现如下所示的 IValidatable

   public class Test : IValidatable
   {
        IEnumerable<string> Validate()
        {
            // Validate and return any validation errors here.
        }
    }

现在我们只需要注册它

 services.AddGraphQLServer().
 UseField<OutputValidationMiddleware>()
于 2021-06-15T08:39:16.450 回答