我添加了一个自定义 json 转换器来修剪反序列化期间传入 Web api 的所有字符串,如下所示
options.JsonSerializerOptions.Converters.Add(new TrimStringJsonConverter());
这对于我使用
[FromBody]
装饰器从请求正文读取数据的所有 Web api 来说都非常有效,但当我在 Web api 中使用 [FromForm]
从表单读取数据时则不起作用。
所以基本上它适用于我从 body 读取数据的 Web api
[HttpPost("fund/add-update")]
public async Task<ActionResult<ResponseDto<string>>> AddUpdateFund([FromBody] AddUpdateFundDto fund)
{
}
但不适用于我从表单读取数据的情况
[HttpPost("fund-house/add-update")]
[Consumes("multipart/form-data")]
[Produces("application/json")]
public async Task<ActionResult<ResponseDto<string>>> AddUpdateFundHouse([FromForm] AddUpdateFundHouseDto model)
{
}
看起来这是设计使然,因为表单的序列化方式与模型的序列化方式不同。
但仍然问,有什么办法让它也适用于表单数据吗?
更新
这就是我准备数据从我的角度代码发送到
AddUpdateFundHouse
Web api 的方式
let formData = new FormData();
formData.append('id', this.addFundHouseFormControl.id.value);
formData.append('shortName', this.addFundHouseFormControl.shortName.value);
formData.append('fullName', this.addFundHouseFormControl.fullName.value);
formData.append('logoImage', this.selectedLogoImage);
[FromBody]它包含的格式是 JSON,XAML ,主要是 JSON 因此,函数 TrimStringJsonConverter 将适用于 json,因此在反序列化时将具有 json 函数 TrimStringJsonConverter 的效果
但如果 [FromForm] 格式为表单编码格式且不包含 json ,则不会使用 TrimStringJsonConverter json 函数
但是如果您想使用该功能,可以通过任何方式进行序列化和反序列化,
public async Task<ActionResult<ResponseDto<string>>> AddUpdateFundHouse([FromForm] AddUpdateFundHouseDto model)
{
var json = JsonSerializer.Serialize(model, new JsonSerializerOptions
{
Converters = { new TrimStringJsonConverter() }
});
var deserializedModel = JsonSerializer.Deserialize<AddUpdateFundHouseDto>(json);
return Ok("Success");
}