Asp.net Core Post 参数始终为空 [关闭]

Posted

技术标签:

【中文标题】Asp.net Core Post 参数始终为空 [关闭]【英文标题】:Asp.net Core Post parameter is always null [closed] 【发布时间】:2017-02-06 11:19:48 【问题描述】:

我正在从提琴手发送 POST:

POST http://localhost:55924/api/Product HTTP/1.1
User-Agent: Fiddler
Host: localhost:55924
Content-Type: application/json; charset=utf-8
Content-Length: 84

"Ean″:”1122u88991″,”Name″:”Post test″,"Description":"Post test desc"

但是 Post 方法总是为空。

// POST api/Product
[HttpPost]
public IActionResult PostProduct([FromBody]Product product)

    if (!ModelState.IsValid)
    
        return BadRequest(ModelState);
    

    _repo.Add(product);

    return CreatedAtRoute("GetToode",product);

当我使用 [FormBody] 时,产品始终为空,当不使用时,产品被重视,但所有字段均为空。产品类很简单。

public class Product

    public int ProductID  get; set; 
    public string EAN  get; set; 
    public string Name  get; set; 
    public string Description  get; set; 
    public int? CategoryID  get; set; 

我尝试按照post 中的建议将 NullValueHandling 添加到 ConfigureServices,但没有用。

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

【问题讨论】:

尝试发送所有属性。包括ProductIDCategoryID 这就像你的映射字段不匹配,名称应该与产品类中的相同,也可以尝试删除[FromBody] 【参考方案1】:

我遇到了类似的问题,但我没有检查 ModelState 作为 OP 的有效性。发生这种情况时,在调试模式下检查它可能会指出模型有什么问题:

在此示例中,我使用无效字符串 'A' 作为 Guid 属性的测试值,因此模型始终为空。

【讨论】:

感谢您的精彩回答!在偶然发现这个之前,我在黑暗中拍摄【参考方案2】:

遇到了同样的问题。事实证明,我没有用于传入实例类的公共无参数构造函数。在这种情况下,Product 仅具有受保护的构造函数,并且无论如何参数始终为 null。希望它可以帮助某人。

【讨论】:

【参考方案3】:

我只需要更正您的 POST 请求中的双引号就可以了。试试这个:

"Ean":"1122u88991","Name":"Post test","Description":"Post test desc"

请看下面的截图。

【讨论】:

老实说,我现在觉得自己太笨了,我自己都没注意到。 不清楚这个答案指的是什么引用,因为这个问题已经被编辑了几次。仅供参考,OP 在原始请求正文中混合使用了 ″ ”" 字符。

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

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

ASP.Net Core Web 应用程序 POST 方法始终接收 NULL 作为参数

ASP.NET WebApi HttpPost 参数始终为空

ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL

IFormFile 始终为空(带有 MVC/Razor 的 ASP.NET Core)

使用 Asp.Net Core Web API 文件上传文件始终为空