Asp.net core MVC post 参数始终为空

Posted

技术标签:

【中文标题】Asp.net core MVC post 参数始终为空【英文标题】:Asp.net core MVC post parameter always null 【发布时间】:2016-11-22 04:42:53 【问题描述】:

我是 MVC 核心的新手。

我创建了一个带有 MVC 核心的项目,该项目有一个控制器。此控制器具有 Get 和 Post 操作方法。如果我使用查询字符串将数据传递给 Get 方法,它可以正常工作,但是当我将复杂的 JSON 传递给 post 方法时,它总是显示为 null。

我在做什么:

发布请求

URL: http://localhost:1001/api/users
Content-Type: application/json
Body: 

   "Name":"UserName",
   "Gender":"Gender of the user",
   "PhoneNumber":"PhoneNumber of the user"

这是 Post 操作方法

[HttpPost]
[Route("api/users")]
public async Task<IActionResult> Post([FromBody]User newUser)

   ...

当发布请求被调用时,newUser 总是显示为 null。如果我删除 [FromBody] 属性,那么我会收到 newUser 对象,但它的所有字段都是空的。

请在这个问题上帮助我并指导我。

已编辑

这是我的用户

public class User

   public int Id  get; set; 
   public string Name  get; set; 
   public string Gender  get; set; 
   public string PhoneNumber  get; set; 

我已经为 json 数据完成了与 here 中描述的相同的操作,但仍然收到 null。

【问题讨论】:

你有任何中间件可以拦截请求吗?你做过wireshark或fiddler trace吗? 不,我正在使用邮递员发送请求。我不知道如何使用 fiddler 跟踪请求。 下载 fiddler,观察请求并检查它们,确保您发送的内容与实际请求相匹配。使用起来真的不复杂 谢谢,我会试试的,但如果我在上面的代码中做错了什么,请告诉我。 @RaviPatel,显示User 类定义。 【参考方案1】:

这可能是因为空值的处理方式。在 AddJsonOptions 中将 NullValueHandling 设置为 Ignore,看看是否有效。

public void ConfigureServices(IServiceCollection services)

    services
        .AddMvc()
        .AddJsonOptions(jsonOptions=>
        
            jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        );

【讨论】:

谢谢哥们,它工作得很好。现在我知道为什么收到的数据为空了。 谢谢 .. 如果没有您的帮助,我想我不会很快解决这个问题。【参考方案2】:

注意原方法Post([FromBody] User newUser)

对于来自 google 的未来读者,如果方法是 Post(User newUser),则可能会出现同样的问题

注意[FromBody]缺乏。这与之前版本的 MVC 不同,在这些版本中,这些参数通常是推断出来的。

如果您是现有的 MVC5 开发人员,并且发现此页面与 AspNetCore.MVC 有关,请务必仔细检查您是否在相关处装饰了 [FromBody]

【讨论】:

【参考方案3】:

我创建了新的 ASP.NET Core 项目,添加了您的功能,并且它工作正常。请在 github 上查看this project。

另外,请参阅从浏览器控制台与此控制器进行简单通信的日志屏幕截图:Console output

【讨论】:

【参考方案4】:

你在Microsoft.AspNetCore.Mvc 1.0.0吗?

如果您是,请尝试在请求中将此对象作为您的主体发送(驼峰式属性):


   "name":"UserName",
   "gender":"Gender of the user",
   "phoneNumber":"PhoneNumber of the user"

【讨论】:

是的,我正在使用 Microsoft.AspNetCore.Mvc 1.0.0 我也在请求正文中发送数据 是的,但是,在 JSON 中使用驼峰式属性名称。 Microsoft.AspNetCore.Mvc 1.0.0中默认。

以上是关于Asp.net core MVC post 参数始终为空的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core MVC POST 方法一个具有外键 ID 的模型

Asp.Net Core MVC - 路由问题

对象反序列化在 Asp Net Core MVC 控制器中的 POST 失败

在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件

如何在 ASP.NET Core MVC 中使用 ADO.NET 向存储过程添加参数?

ASP.NET Core MVC 标签助手参数中的字符串文字