我创建了一个新的 ASP.NET Core 2.1 API 项目,带有一个Datadto 类和这个控制器操作:
[HttpPost]
public ActionResult<Data> Post([FromForm][FromBody] Data data)
{
return new ActionResult<Data>(data);
}
public class Data
{
public string Id { get; set; }
public string Txt { get; set; }
}
它应该将数据回显给用户,没什么特别的。但是,这两个属性中只有一个有效,具体取决于顺序。
以下是测试请求:
curl -X POST http://localhost:5000/api/values \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'id=qwer567&txt=text%20from%20x-www-form-urlencoded'
和
curl -X POST http://localhost:5000/api/values \
-H 'Content-Type: application/json' \
-d '{
"id": "abc123",
"txt": "text from application/json"
}'
我尝试了几种方法,都无济于事:
创建自定义 child BindingSource,但这似乎只是元数据。
使用属性[CompositeBindingSource(...)],但构造函数是私有的,这可能不是预期用途
IModelBinder为此创建一个和提供程序,但是 (1) 我可能只希望在特定的控制器操作上使用它,并且 (2) 获得两个内部模型绑定器(用于 Body 和 FormCollection)似乎确实需要做很多工作
那么,将属性FromForm和FromBody(或我猜任何其他来源的组合)属性合二为一的正确方法是什么?
澄清这背后的原因,并解释为什么我的问题不是这个问题的重复:我想知道如何使用相同的 URI/路由来支持两种不同类型的发送数据。(尽管可能对某些人的口味,包括我自己的口味,不同的路线/uri 可能更合适。)
喵喔喔
呼唤远方
幕布斯7119047
相关分类