首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将两个填充的类模型通过角http.post‘体’传递给控制器?

如何将两个填充的类模型通过角http.post‘体’传递给控制器?
EN

Stack Overflow用户
提问于 2019-06-18 12:22:21
回答 2查看 2.3K关注 0票数 0

我收到一条错误消息,“序列不包含任何元素”,同时试图通过使用“AspNet”传递两个模型参数,将SQL中的表从角7更新到http.post核心控制器。

我将数据从表单传递到类模型,没有问题,因为我可以在浏览器控制台中看到有效负载数据。但是,当试图将模型作为参数在我的api服务中传递给控制器时,模型中的所有参数都为空。当通过一个模型parm时,我通常没有问题,但是将其中两个模型传递到我的控制器上,使用FromBody似乎不想为我工作。

我试图用花括号包装这些模型,以传递它们,但没有结果:

代码语言:javascript
运行
复制
UpdateService(serviceAddress: ServiceAddressModel, contact: ContactModel) {
let reqHeader = new HttpHeaders();
let body = { svc: serviceAddress, cnt: contact };
reqHeader.append('Content-Type', 'application/json');
return this.http.post(this.baseurl + 'api/customermanagement/update-service-address-info', body, { headers: reqHeader });

当我在浏览器控制台中查看请求/响应时,我可以看到有效负载中的数据,因此我知道数据已经准备好传递。

我的控制器设置如下:

代码语言:javascript
运行
复制
       [Route("update-service-address-info")]
    public bool UpdateServiceAddressAccount([FromBody] ServiceAddressEntity svc_id, [FromBody] ContactEntity cnt_id)
    {
        return serviceAddressService.UpdateServiceAddressAccount(svc_id, cnt_id);
    }

在此调用中使用断点显示所有值的空值。

如果我能正确地把参数传递给我的界面,我应该是好的。我感觉到我没有在http.post体中正确地构造参数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-18 13:03:37

您的请求主体,{ svc: serviceAddress, cnt: contact }作为json字符串接收,例如{"svc":{"serviceAddressProperty1":"value",...},"cnt":{"contactProperty1":"value",...}}。操作方法的参数通过默认的模型绑定机制绑定(除非提供自己的自定义模型绑定实现)。默认机制试图通过从与请求一起接收的json对象的顶层绑定来创建实例。简单地说,让我们假设enter code hereServiceAddressModel的定义如下:

代码语言:javascript
运行
复制
public class ServiceAddressModel
{
   public string Name { get; set; }
   public string Property2 { get; set; }
}

模型绑定器在json树的顶层查找名称为"name""property2"的属性。如果找到,它们将绑定到创建的实例的NameProperty2属性。在您的示例中,将模型包装在一个类中,这样可以使svc_idcnt_id成为顶级属性,这样可以很好地工作。就像这个例子:

代码语言:javascript
运行
复制
public class MyRequest
{
     public ServiceAddressModel svc_id { get; set; }
     public ContactEntity cnt_id { get; set; }
}

然后,您可以声明您的行动如下

代码语言:javascript
运行
复制
 [Route("update-service-address-info")]
public bool UpdateServiceAddressAccount([FromBody] MyRequest request)
{
    return serviceAddressService.UpdateServiceAddressAccount(request.svc_id, request.cnt_id);
}

默认情况下,蛇套,骆驼套应该被允许(你必须试一试,我还没有测试过那部分)。也就是说,如果您将属性声明为SvcIdCntId (如果您更喜欢更自然的C#命名约定),它应该能够正确地从JSON与"svc_id""cnt_id"绑定。

另一种选择是实现自定义模型绑定,但这可能是一个更长、更复杂的路径。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2019-06-18 12:59:12

只需尝试像这样传递值,然后看到

设body ={ svc_id:serviceAddress,cnt_id:contact };

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56649067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档