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

时间:2018-04-17 22:16:36

标签: c# asp.net-core asp.net-core-routing

  1. 在VS2017中,我创建了新的ASP.NET核心Web应用程序

  2. 我的示例代码获取方法完美无缺,但

  3. POST方法始终接收null作为参数。

  4. 此方法:

    [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   
    

    在Post值中为null。

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

    试图通过' ='传递价值有人建议。相同,null。

    试图使用动态。

    public void Post(dynamic value)...
    

    ,值为空。

    试图使用

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

    - 同样,null。

    当我使用

    [HttpPost]
    public void Post(HttpRequestMessage request) // [FromBody]
    {
        string body = request.Content.ReadAsStringAsync().Result;
        var headers = request.Headers;
    }
    

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

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

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

{ "value" : "something here" }