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

Posted

技术标签:

【中文标题】ASP.Net Core Web 应用程序 POST 方法始终接收 NULL 作为参数【英文标题】:ASP.Net Core web app POST method always receives NULL as a parameter 【发布时间】:2018-09-28 00:31:06 【问题描述】:

    在 VS2017 中我创建了新的 ASP.NET Core Web 应用程序

    我的示例代码 Get 方法运行良好,但是

    POST 方法总是接收 null 作为参数。

这个方法:

[HttpPost]
public void Post([FromBody]string value)

     System.Diagnostics.Debug.Print("\n'" + value + "'\n");

我试过了:

curl -X POST -H "Content-Type: application/json" -d '"msg": "hello"' localhost:57084/api/values   

In Post 值为空。

尝试使用 POSTMAN: 与内容类型和消息正文的所有可能组合。 NULL 作为输入。

尝试按照某人的建议使用“=”传递值。一样,null。

尝试使用动态。

public void Post(dynamic value)...

,值为空。

尝试使用

public void Post([FromBody] HttpRequestMessage request)...

-- 相同,为空。

我用的时候

[HttpPost]
public void Post(HttpRequestMessage request) // [FromBody]

    string body = request.Content.ReadAsStringAsync().Result;
    var headers = request.Headers;

请求具有属性:方法:“GET”,RequesrURL=null,Headers=null,Content=null

它可能是一些小而愚蠢的东西,但我似乎还找不到它。

【问题讨论】:

【参考方案1】:

创建一个模型来保存发送到控制器动作的数据。

例如,给定以下 JSON

"msg": "hello"

强类型模型看起来像

public class MyModel 
    public string msg  get; set; 

然后重构控制器以期望该模型

[HttpPost]
public IActionResult Post([FromBody]MyModel model)
    //...access the model

    return Ok(model); //echo

【讨论】:

【参考方案2】:

通过请求传递的请求参数与预期不同。 如果您定义的操作需要一个名为“value”的字符串参数,则调用请求时的预期参数将是:

 "value" : "something here" 

【讨论】:

以上是关于ASP.Net Core Web 应用程序 POST 方法始终接收 NULL 作为参数的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 ASP.NET Core Web api 发布到另一个 ASP.NET Core Web api

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用AutoMapper进行实体映射

net core体系-web应用程序7asp.net core日志组件

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

ASP.NET Core Web 应用程序系列- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入

ASP.NET Core Web API