工具
视觉工作室 2017
ASP.NET 核心 2.2
邮递员 v7.2.0
我想做什么
将 FormData 从 Postman 发送到 ASP.NET Core 控制器,并将来自请求的数据绑定到具有私有设置器属性的命令类。
我已经使用相同的设置(私有设置器)毫无问题地发送了 JSON 数据。该FromBody
属性将 JSON 字符串反序列化为模型而不会出现错误。
问题
如果模型具有私有设置器,则原始类型的属性不会绑定。但是,复杂类型与访问修饰符无关。
控制器
[HttpPost]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
public async Task<IActionResult> CreateItemAsync([FromForm]CreateItemCommand command)
{
bool result = false;
commandResult = await _mediator.Send(command);
if (!commandResult)
{
return BadRequest();
}
return Ok();
}
命令
注意:该Title属性已被故意保留为 public setter 以说明行为
[DataContract]
public class CreateItemCommand
:IRequest<bool>
{
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; private set; }
[DataMember]
public int Count { get; private set; }
[DataMember]
public HashSet<string> Tags { get; private set; }
[DataMember]
public string ItemDate { get; private set; }
[DataMember]
public List<IFormFile> Documents { get; private set; }
public CreateItemCommand()
{
Skills = new HashSet<string>();
Systems = new HashSet<string>();
}
public CreateItemCommand(string title, string description,
int count, HashSet<string> tags, string itemDate,
List<IFormFile> documents)
: this()
{
Title = title;
Description = description;
Count = count
Tags = tags;
ItemDate = itemDate;
Documents = documents;
}
}
在 Postman 中,我现在将请求设置如下:
我不得不混淆一些信息,但您可以看到没有设置带有私有 setter 的原始类型。
问题
为什么属性访问修饰符只影响原始类型的属性?
为什么参数属性设置为时会出现这种情况,FromForm
设置为时却不会FromBody
繁星点点滴滴
相关分类