从 Form 接收数据时 JsonConverter 不起作用

问题描述 投票:0回答:1

我添加了一个自定义 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);
c# .net-core json-deserialization jsonconverter
1个回答
0
投票

[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");
}
© www.soinside.com 2019 - 2024. All rights reserved.