如何调用接受两个模型的Controller方法
本文关键字:模型 两个 Controller 方法 何调用 调用 | 更新日期: 2023-09-27 18:22:07
如果我们有一个API控制器,其方法如下:
[HttpPost]
public IHttpActionResult DoStuff([FromBody]ModelA modelA, [FromBody]ModelB modelB)
注意两个[FromBody]
属性。
问题是,如何调用这样的方法?
localhost/test/DoStuff/
POST数据:
<?xml version="1.0"?>
<ModelA>
...
</ModelA>
<ModelB>
...
</ModelB>
似乎没有得到认可。有什么想法吗?
编辑:错误数据如下:
<?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>
我想说的是,与其用文档来证明缺乏对多个模型的支持,不如从软件体系结构的角度来寻找一个论点: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)
创建一个由两个模型组成的ViewModel,并将其用作控制器中的单个模型。
public class MergedModel
{
public ModelA A{get; set;}
public ModelB B{get; set;}
}
你不能。默认的参数绑定在使用属性FromBody
时使用整个主体,而不仅仅是其中的一部分。因此只有一个FromBody
可以工作。
要解决此问题,您可以:
- 创建自己的参数绑定,读取主体并将其拆分为两个模型
- 传入一个包装器模型
您可以将字符串用于JSON数据。
JSON.stringify({ ModelA: o, ModelB: a}),
当XML使负载繁重时,为什么要使用它?