在 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;
}
我有一个 .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;
}