我知道这个问题已经被问了很多次,但之前的解决方案都没能帮助我解决我的问题(其实这似乎是一个非常简单的问题)。 我只想向我在控制器类中创建的Post方法发送一个Json对象。 以下是我控制器类的有趣部分:
[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控制器,value字段是非空的InfoNegozio对象,但字段IdNegozio
和AttesaStimata
始终为0。
我使用Razor页面项目中的控制器,必须在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对象,所以任何更聪明的解决方案都将不胜感激。