now*_*ed. 4 .net c# asp.net-mvc asp.net-web-api
如果我们有一个带有如下方法的API控制器,这似乎是完全有效的:
[HttpPost]
public IHttpActionResult DoStuff([FromBody]ModelA modelA, [FromBody]ModelB modelB)
Run Code Online (Sandbox Code Playgroud)
注意这两个[FromBody]属性.
问题是,如何调用这样的方法?
localhost/test/DoStuff/
Run Code Online (Sandbox Code Playgroud)
发布数据:
<?xml version="1.0"?>
<ModelA>
...
</ModelA>
<ModelB>
...
</ModelB>
Run Code Online (Sandbox Code Playgroud)
似乎没有得到承认.有什么想法吗?
编辑:错误数据如下:
<?xml version="1.0"?>
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>Can't bind multiple parameters ('model1' and 'model2') to the request's content.
</ExceptionMessage>
</Error>
Run Code Online (Sandbox Code Playgroud)
我要说的是,不要用文档来证明缺乏对多个模型的支持,你应该从软件架构的角度来看一个论点:ASP.NET Web API构建在MVC范例之上,其中视图绑定到模型并由控制器处理.
换句话说:1个模型,1个视图,1个控制器.
您的用例不应该使用2个模型来解决,而是使用DTO.不是将2个参数绑定到2个模型,而是设计一个DTO,其中包括两个模型作为整个DTO的关联:
// You don't need [FromBody] since complex types are already taken
// from the request body
public IHttpActionResult DoStuff(SomeDto dto)
Run Code Online (Sandbox Code Playgroud)