在 NSwag 生成的客户端中验证请求

Validate Requests in NSwag generated Client

我有一个 .NET 6 Web 客户端和 REST 合同,它是从带有 NSwag 的 YAML 生成的。 合同包含一些验证属性。有什么方法可以在客户端验证我的请求吗?我不想手写验证码。 在 NSwag 文档中,我只找到了为生成的控制器生成验证属性的标志,但没有为 Web 客户端找到。

YAML:

      - name: anyField
        in: query
        description: Field with max value=20 and required
        required: true
        schema:
          maximum: 20
          type: integer
          format: int32

生成的合约代码:

        /// <summary>
        /// Field with max value=20 and required
        /// </summary>
        [Newtonsoft.Json.JsonProperty("anyField", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
        public int AnyField{ get; set; } 

我可以使用 NSwag 读取 yaml,获取 json 架构并将其用于验证:

public async Task<ICollection<ValidationError>> Validate(Request request) {
    var yamlBytes = resx.yaml;
    await using var yamlMs = new MemoryStream(yamlBytes);
    using var yamlReader = new StreamReader(yamlMs);
    var yamlText = await yamlReader.ReadToEndAsync();

    var apiDocument = await NSwag.OpenApiYamlDocument.FromYamlAsync(yamlText);

    var schema = apiDocument.Paths["/restPath"]["post"].RequestBody.Content["application/json"].Schema;
    var jsonSettings = new JsonSettingsProvider().ProvideSettings;
    var body = JsonConvert.SerializeObject(request, jsonSettings);
    var errors =  schema.Validate(body);

    return errors;
}