【问题标题】:get "Request Payload" in asp.net core controller在 asp.net 核心控制器中获取“请求有效负载”
【发布时间】:2021-08-12 15:08:43
【问题描述】:

在客户端,我愿意

$.ajax({
    url: '/emplacements/keyexist',
    type: "POST",
    data: JSON.stringify(postData),
    dataType: "json",
    traditional: true,
    contentType: "application/json; charset=utf-8",

但是action方法中的值总是'null'

[AcceptVerbs("GET", "POST")]
public IActionResult KeyExist(
    string nom,            //[Bind(Prefix = nameof(EmplacementDTO.Nom))],
    int id                 //[Bind(Prefix = nameof(EmplacementDTO.Id))]
)
{
    // nom == null
    // id == 0

如何解决?

【问题讨论】:

  • 如果我的回答对您有所帮助,请接受该回答,以便其他人可以从您的问题和回答中受益。

标签: c# asp.net-core-mvc telerik-grid .net-5 remote-validation


【解决方案1】:

首先为您的有效载荷制作一个模型,如下所示。

public class MyPayload
{
    public string Nom{ get; set; }

    public int Id { get; set; }
}

在你的控制器内部Action 方法

public IActionResult KeyExist([FromBody] MyPayload payload)

[FromBody] 会在属性名称匹配时自动映射请求正文。

您的ajax 电话还有另一个问题,您将Id 作为string 发送,但Controller 期望int

【讨论】:

  • 因为这是json,如果他发送14"14",效果一样。如果 OP 将绑定的参数声明为 int,则在参数绑定时会解析为 int。
  • @RodrigoRodrigues 你是对的,但在某些情况下绑定会失败。
猜你喜欢
  • 1970-01-01
  • 2017-03-22
  • 2013-09-23
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
相关资源
最近更新 更多