C# 如何通过角度http.post';车身';给控制员?

C# 如何通过角度http.post';车身';给控制员?,c#,angular,asp.net-core,parameter-passing,C#,Angular,Asp.net Core,Parameter Passing,我在尝试通过使用“http.post”传递两个模型参数,将SQL中的表从Angular 7更新到AspNet核心控制器时收到一条错误消息,“Sequence contains no elements” 我正在毫无问题地将数据从表单传递到类模型,因为我可以在浏览器控制台中看到有效负载数据。但是,当尝试将模型作为api服务中的参数传递给控制器时,模型中的所有参数都为null。我通常在通过一个模型parm时没有问题,但通过其中两个模型以[FromBody]到达我的控制器似乎对我不起作用 我试图用花括号

我在尝试通过使用“http.post”传递两个模型参数,将SQL中的表从Angular 7更新到AspNet核心控制器时收到一条错误消息,“Sequence contains no elements”

我正在毫无问题地将数据从表单传递到类模型,因为我可以在浏览器控制台中看到有效负载数据。但是,当尝试将模型作为api服务中的参数传递给控制器时,模型中的所有参数都为null。我通常在通过一个模型parm时没有问题,但通过其中两个模型以[FromBody]到达我的控制器似乎对我不起作用

我试图用花括号把模型包起来,让它们通过,但没有成功:

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 });
当我在浏览器控制台中查看请求/响应时,我可以看到有效负载中的数据,因此我知道数据已准备好传递

我的控制器设置如下:

       [Route("update-service-address-info")]
    public bool UpdateServiceAddressAccount([FromBody] ServiceAddressEntity svc_id, [FromBody] ContactEntity cnt_id)
    {
        return serviceAddressService.UpdateServiceAddressAccount(svc_id, cnt_id);
    }
在此调用中使用断点将显示所有值的null


如果我能正确地将参数传递给我的接口,我就可以开始了。我感觉到我没有在http.post正文中正确地构造参数。

请尝试像这样传递值,然后查看


let body={svc\u id:serviceAddress,cnt\u id:contact}

试着像这样传递值,看看


let body={svc\u id:serviceAddress,cnt\u id:contact}

您的请求主体,
{svc:serviceAddress,cnt:contact}
作为json字符串接收,例如,
{“svc”:{“serviceAddressProperty1”:“value”,…},“cnt”:{“contactProperty1”:“value”,…}
。动作方法的参数通过默认模型绑定机制绑定(除非您提供自己的自定义模型绑定实现)。默认机制尝试通过从请求接收的json对象的顶层绑定来创建实例<代码>在此处输入代码 更简单地说,假设class
ServiceAddressModel
的定义如下:

public class ServiceAddressModel
{
   public string Name { get; set; }
   public string Property2 { get; set; }
}
模型绑定器在json树的顶层查找名称为
“name”
“property2”
的属性。如果找到,它们将绑定到所创建实例的
名称
属性2
属性。 在您的情况下,将模型包装在一个类中,该类可以使
svc\u id
cnt\u id
成为顶级属性。像这个例子:

public class MyRequest
{
     public ServiceAddressModel svc_id { get; set; }
     public ContactEntity cnt_id { get; set; }
}
然后你可以像这样声明你的行为

 [Route("update-service-address-info")]
public bool UpdateServiceAddressAccount([FromBody] MyRequest request)
{
    return serviceAddressService.UpdateServiceAddressAccount(request.svc_id, request.cnt_id);
}
默认情况下,蛇壳、骆驼壳应该是允许的(你必须试试,我还没有测试过那个部件)。也就是说,如果您将属性声明为
SvcId
CntId
(如果您更喜欢自然的C#命名约定),那么它应该能够从JSON中正确绑定
“svc_id”
“cnt_id”

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


希望这能有所帮助。

您的请求正文,
{svc:serviceAddress,cnt:contact}
作为json字符串接收,例如,
{svc:{serviceAddressProperty1:“value”,…},“cnt:{contactProperty1:“value”,…}
。动作方法的参数通过默认模型绑定机制绑定(除非您提供自己的自定义模型绑定实现)。默认机制尝试通过从请求接收的json对象的顶层绑定来创建实例<代码>在此处输入代码 更简单地说,假设class
ServiceAddressModel
的定义如下:

public class ServiceAddressModel
{
   public string Name { get; set; }
   public string Property2 { get; set; }
}
模型绑定器在json树的顶层查找名称为
“name”
“property2”
的属性。如果找到,它们将绑定到所创建实例的
名称
属性2
属性。 在您的情况下,将模型包装在一个类中,该类可以使
svc\u id
cnt\u id
成为顶级属性。像这个例子:

public class MyRequest
{
     public ServiceAddressModel svc_id { get; set; }
     public ContactEntity cnt_id { get; set; }
}
然后你可以像这样声明你的行为

 [Route("update-service-address-info")]
public bool UpdateServiceAddressAccount([FromBody] MyRequest request)
{
    return serviceAddressService.UpdateServiceAddressAccount(request.svc_id, request.cnt_id);
}
默认情况下,蛇壳、骆驼壳应该是允许的(你必须试试,我还没有测试过那个部件)。也就是说,如果您将属性声明为
SvcId
CntId
(如果您更喜欢自然的C#命名约定),那么它应该能够从JSON中正确绑定
“svc_id”
“cnt_id”

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


希望这能有所帮助。

你的方法非常有效!另外,关于命名约定,你是对的。只要拼写一致,不管“大小写”如何,它都是匹配的。荣誉@Janou很乐意帮忙。如果你满意的话,就用心理标记作为答案?你的方法很有魅力!另外,关于命名约定,你是对的。只要拼写一致,不管“大小写”如何,它都是匹配的。荣誉@Janou很乐意帮忙。如果您感到满意,是否介意标记为答案?