我创建了一个新的ASP.NET Core 2.1 API项目,其中Data包含dto类和以下控制器操作:
[HttpPost]
public ActionResult<Data> Post([FromForm][FromBody] Data data)
{
return new ActionResult<Data>(data);
}
Run Code Online (Sandbox Code Playgroud)
public class Data
{
public string Id { get; set; }
public string Txt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它应该将数据回显给用户,没有任何幻想。但是,取决于顺序,两个属性中只有一个起作用。
这是测试要求:
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'
Run Code Online (Sandbox Code Playgroud)
和
curl -X POST http://localhost:5000/api/values \
-H 'Content-Type: application/json' \
-d '{
"id": "abc123",
"txt": "text from application/json"
}'
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,但都无济于事:
BindingSource,但这似乎只是元数据。[CompositeBindingSource(...)],但构造方法是私有的,可能不打算使用IModelBinder为此创建一个and提供程序,但是(1)我可能只希望在特定的控制器操作上执行此操作,并且(2)似乎需要大量工作才能获得两个内部模型绑定程序(用于Body和FormCollection)那么,什么是结合的正确方法FromForm和 …