如何解决使用C#进行热巧克力验证
所以最近我一直在和Hotchocolate玩耍,我开设了一门课,给我回了一个学生列表,但我想为此提供一些验证功能。我没有从hotchocolate官方网站上找到任何可以帮助我的东西。
Student.cs
public class Student
{
[GraphQLNonNullType]
public string Name{ get; set; }
[GraphQLNonNullType]
public string LastName{ get; set; }
[GraphQLNonNullType]
public string Picture { get; set; }
}
这是我的查询,当前可以从列表中退回所有学生。
StudentQuery.cs
public class StudentQuery
{
[UseFiltering]
[UseSorting]
public List<Student> GetStudents()
{
return MongoDBHelper.LoadRecords<Student>(EMongoCollection.Students);
}
}
现在我的问题是,我该如何为学生制定ValidationRule,例如说一个学生的姓名必须至少包含3个字符? 有人能为我提供例子吗?
谢谢。
解决方法
HotChocolate 本身没有集成此类输入验证。 该框架仅进行 GraphQL 验证。所以检查无效的 GraphQL 查询。 (例如错误类型)
如果您想使用验证,有几个社区库可供选择:
- FairyBread - 热巧克力的输入验证
- FluentChoco - 热巧克力的 FluentValidation 中间件
- AppAny.HotChocolate.FluentValidation - 输入字段 HotChocolate + FluentValidation 集成
此处列出了社区图书馆: https://github.com/ChilliCream/hotchocolate/blob/main/COMMUNITY.md
,除了 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>()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。