ASP.NET 核心 MVC 控制器未绑定

ASP.NET Core MVC controller not binding

正在执行从提取 api 到端点的请求,并且道具未绑定。

端点上的 id 和 fileName 分别为 0 和 null。

我的抓取:

fetch(`https://localhost:44343/items/edit`, {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                id:123,
                fileName:"asd"
            })
        })
            .then(response => console.log(response))
            .catch(error => console.error('Unable to update item.', error));

我的终点:

[HttpPost]
public async Task<IActionResult> Edit([FromBody]int id, string fileName)
{
    return Ok(id);
}

请求负载显示正在发送值:

我试过使用和不使用 [FromBody] 显式添加到操作的路由,更改为 PUT 而不是 POST(为什么更新操作的默认值是POST??)

还有什么我可以尝试的吗?

创建一个 class 来表示 json 结构:

public class Request
{
   public int id {get; set;} 
   string fileName {get; set;} 
}

并在行动中接受它:

public async Task<IActionResult> Edit(Request r)
{
   // use r
}

More on model binding in ASP.NET Core.

如前一条评论所述,创建一个对象模型来表示 json

public class Request
{
   public int Id {get;set;}
   public string FileName {get;set;}
}

在您的控制器操作方法中

   [HttpPost]
   [Route("items/edit")]
   public IActionResult Edit([FromBody] Request req)
   {
     return Ok();
   }