gpt4 book ai didi

json - 将 json 数据传递给 ASP.Net core 2 web api

转载 作者:行者123 更新时间:2023-12-05 07:11:41 26 4
gpt4 key购买 nike

我知道这个问题已经被问过好几次了,但是以前的解决方案都没有帮助我解决我的问题(实际上这看起来很简单)。我只想将 Json 对象发送到我在 Controller 类中创建的 Post 方法。这是我的 Controller 类中有趣的部分:

[Route("api/[controller]")]
public class CodeController : Controller
{
[HttpPost]
public void Post([FromBody] InfoNegozio value)
{
return;
}
}

我保持简单,因为我只想正确设置值。这是 InfoNegozio 类:

public class InfoNegozio
{
public int IdNegozio { get; set; }
public string NomeNegozio { get; set; }
public int AttesaStimata { get; set; }
public DateTime UltimoAggiornamento { get; set; }
}

这是用于向此 API 发送数据的代码:

var myData = { "IdNegozio": idNegozio, "AttesaStimata": tempoAttesa };
$.ajax({
url: "api/Code",
type: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(myData)
});

JQuery 代码只是调用了 webapi Controller ,value 字段是一个非空的 InfoNegozio 对象,但是 IdNegozioAttesaStimata 字段始终为 0。

我可能会问我在 Razor Page 项目中使用 Controller ,我必须在 Startup.Configure 方法中添加这行代码才能使其工作(“它”是指其他 webapi GET 方法)。

app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

有什么想法吗?

已编辑

使用 postman ,我弄清楚了工作电话和不工作电话之间的区别。用 postman 发布这个 json 是有效的:

{
"IdNegozio": 1,
"AttesaStimata": 36
}

不幸的是,使用 jquery,使用 JSON.stringify,我得到了这个(注意值上的双引号):

 {
"IdNegozio": "1",
"AttesaStimata": "36"
}

这行不通!Json stringify 是否与.net core Web Api 不兼容?是否有可能没有一种干净的方法让这两个库协同工作?

已编辑 2

我最终手动构建了 json,强制 jquery 发送“我的版本”,所以我的 js 代码现在正在寻找:

var myData = '{ "IdNegozio": '+idNegozio+', "AttesaStimata": '+tempoAttesa+' }';
$.ajax({
url: "api/Code",
type: "POST",
contentType: "application/json",
dataType: "json",
data: myData
});

无论如何,我不喜欢这个解决方案,因为我似乎没有使用正确的方法来构建 json 对象,因此我们将不胜感激任何更智能的解决方案。

最佳答案

创建一个答案,这样我们就不会对您的帖子发表一百万条评论。这是一个 ASP.NET Core 3.1 Web API 项目,对吗?如果是这样,请尝试进行这几项更改,看看是否能解决问题。

继承自 ControllerBase 而不是完整的 Controller 类。还要将 [ApiController] 属性添加到您的 CodeController 类。然后对于您的 Post 操作,从您的 InfoNegozio 参数中删除 [FromBody] 属性。像这样:

[Route("api/[controller]")]
[ApiController]
public class CodeController : ControllerBase
{
[HttpPost]
public IActionResult Post(InfoNegozio value)
{
return Ok(value);
}
}

看看是否能解决任何问题。模型绑定(bind)期间出现问题,这让我相信您的 JSON 序列化配置搞砸了。如果您可以发布您的 Startup.cs,那么我们可以查看是否存在配置错误。我刚刚打开了一个 .NET Core 3.1 Web API 项目并测试了我的一个 Controller ,它按预期工作。所以试一试,看看是否可以解决问题。这些项目将影响 Controller 的配置方式,因此如果它是一个 API Controller ,处理标准 API 请求(application/json),那么它应该这样配置。您可以阅读有关 ASP.NET Core 3.1 文档的详细信息,但将此设置正确设置为 API Controller 将确保您的 JSON 请求得到正确序列化。现在您已将其设置为 MVC Controller ,这可能是您遇到问题的原因。

编辑:另外,考虑从您的 Controller 操作返回一个 IActionResult。可能会使测试更容易,因为您实际上可以收到可以帮助您找到错误的响应。然后只需更改 return;返回确定();更新了代码示例以反射(reflect)这一点。

关于json - 将 json 数据传递给 ASP.Net core 2 web api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60688551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com