【问题标题】:Angular4 http.post .NET Core MVC bind failureAngular4 http.post .NET Core MVC 绑定失败
【发布时间】:2023-04-03 01:05:01
【问题描述】:

尝试了很多解决方案将对象从 Angular4 服务传递到 c# 控制器。虽然我确实在服务中收到了对象,但没有绑定到 c# 控制器,所以我收到 null

角度服务:

getShedule(payload: any) {
    this._http.post("Shedule/GetSchedule", payload)
        .map(res => res.json()).subscribe((x) => {
            console.log("callback succes");
        });
}

C# 控制器:

[HttpPost]
public void GetSchedule(object priceScheduleObject)
{ 
    //logic here
}

欢迎任何帮助。

【问题讨论】:

  • 您是否尝试使用实际输入的参数而不是在控制器上使用“对象”?您很可能有一个名为“PriceSchedule”的类,请尝试使用它而不是“object”
  • 是的,我也是通过 PriceScheduleDTO 类完成的,但是虽然控制器命中,但值仍然为空。
  • 您的payload 对象是什么样的?您是否已验证它不为空?
  • 好吧,结构如下: ` public class PriceScheduleDTO { public int Price { get;放; } 公共 int 存款 { 获取;放; } 公共字符串计划 { 获取;放; } }`
  • 那个结构和“payload”的结构类似吗?您确定有效负载不为空或为空吗?您可以发布您的 HTTP 请求详细信息吗?编辑:尝试使用 Fiddler 捕获 HTTP POST 请求

标签: c# asp.net-mvc angular asp.net-core-mvc


【解决方案1】:

尝试将您的 C# 控制器更改为

[HttpPost]
public void GetSchedule([FromBody] JObject priceScheduleObject)
{ /

[FromBody] 注释让 ASP.NET Core 绑定逻辑查看消息正文(而不是发布的表单字段)。 如果您不想与表示 JSON 数据的 JObject 进行交互,您可以将数据绑定到类似的模型

public class PriceSchedule {
   public string Name {get; set;} // just an example, propert names depend on your json
   ...
}

[HttpPost]
public void GetSchedule([FromBody] PriceSchedule priceScheduleObject)
{ /

【讨论】:

  • 我尝试了这个解决方案,但我得到了“不支持的媒体类型”——甚至控制器都没有被击中。服务内部有什么需要操作的吗?
  • 请在浏览器的开发工具中检查请求是否以内容类型application/json的形式发送,并且请求正文中的json格式是否正确。如果已注册的序列化程序无法解析内容(据我所知,JSON 已注册为默认值,对于 XML,您必须进行额外配置)ASP.NET Core 将退出处理而不会影响您的控制器。
猜你喜欢
  • 2020-03-23
  • 1970-01-01
  • 2017-06-07
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
相关资源
最近更新 更多