Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言验证热巧克力#_C#_Validation_.net Core_Hotchocolate - Fatal编程技术网

C# 用C语言验证热巧克力#

C# 用C语言验证热巧克力#,c#,validation,.net-core,hotchocolate,C#,Validation,.net Core,Hotchocolate,所以我最近一直在玩热巧克力,我做了一个课程,给我一个学生名单,但我想有一些验证函数。我没有从官方的热巧克力网站上找到任何对我有帮助的东西 学生会 public class Student { [GraphQLNonNullType] public string Name{ get; set; } [GraphQLNonNullType] public string LastName{ get; set; } [GraphQLNonNullType]

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

学生会

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

}
公共类学生查询
{
[使用过滤]
[使用排序]
公众学生名单
{
返回MongoDBHelper.LoadRecords(emongCollection.Students);
}
}
现在我的问题是,我如何为一个学生制定一个验证规则,比如说一个学生的名字必须至少有3个字符? 有人能给我举个例子吗


提前感谢。

热巧克力本身没有这种输入验证的集成。 该框架只进行GraphQL验证。因此检查无效的GraphQL查询。(例如,错误的类型)

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

  • -热巧克力的输入验证
  • -热巧克力的FluentValidation中间件
  • -输入字段热巧克力+FluentValidation集成
此处列出了社区图书馆:

除了第三方库之外。。我们可以编写一个自定义中间件来处理从服务输出的数据的数据验证

中间件示例代码

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;
    }
}
公共类OutputValidationMiddleware
{
私有只读字段委托下一步;
专用只读ILogger记录器;
公共输出验证中间件(
下一步,
ILogger(记录器)
{
this.next=next;
this.logger=记录器;
}
公共异步任务InvokeAsync(IMIDLEWARECONTEXT上下文)
{
等待下一步(上下文)。配置等待(false);
if(context.Result!=null&&context.Result可转换)
{
var validationErrors=(context.Result为IValidatable.Validate();
foreach(validationErrors中的var err)
{
logger.LogWarning(错误);
}
}
返回;
}
}
现在,您的模型需要实现如下所示的表

   public class Test : IValidatable
   {
        IEnumerable<string> Validate()
        {
            // Validate and return any validation errors here.
        }
    }
公共类测试:IValidatable
{
IEnumerable验证()
{
//验证并在此处返回任何验证错误。
}
}
现在我们只需要注册它

 services.AddGraphQLServer().
 UseField<OutputValidationMiddleware>()
services.AddGraphQLServer()。
尤斯菲尔德()