我有一个dotnet API项目,我已经从2.2升级到5.0。
自从升级以来,当控制器试图用POST模型做某事时,我所有的POST请求都停止工作(获得'对象引用未设置为对象的实例')。
当我在调试模式下运行时,模型为空。
一个API的例子-调试显示,模型是空的,所以模型。enteredDateFrom失败,出现对象引用错误。
[HttpPost] [Route("GetJobsReport")] public async Task<IActionResult> GetJobsReport([FromBody] JobsReportSearchViewModel model) { if (model.enteredDateFrom != null)
我有一个没有改变的Angular前端,我已经确认我发送了正确的参数——但它发生在所有的post上。
我甚至不确定如何开始解决这个问题。
如果GetJobsReport方法中的model参数为空,这意味着API不能将从Angular前端发送到JobsReportSearchViewModel对象的JSON对象反序列化。这可能是由于JSON对象和模型之间的不匹配,或者由于JSON序列化/反序列化过程的问题。
这些建议可以解决你的问题:
检查从Angular前端发送的JSON对象是否与JobsReportSearchViewModel模型匹配。您可以使用浏览器开发人员工具来检查网络流量,并检查JSON有效负载是否被正确发送。
检查JSON有效负载是否以正确的内容类型发送。对于json有效负载,应该是application/json。
检查JobsReportSearchViewModel模型是否在c#代码中正确定义。确保所有属性都存在并且具有正确的数据类型。
检查JSON序列化器在你的API项目中是否配置正确。在ASP。. NET 5,默认的JSON序列化器是System.Text.Json。确保它在您的API项目中被正确配置,并且任何自定义序列化设置都被正确应用。
如果您正在使用自定义JSON序列化/反序列化,请确保它正常工作并且不会引起任何问题。
检查API项目中的任何中间件或过滤器没有干扰JSON序列化/反序列化过程。
尝试在控制器中添加[ApiController]属性以启用自动模型验证。
添加状态。IsValid检查你的控制器方法,以确保模型是有效的。
我希望你能按照这些步骤解决你的问题。