如何在控制器中检索 POST 数据

Posted

技术标签:

【中文标题】如何在控制器中检索 POST 数据【英文标题】:How to retrieve POST data in Controller 【发布时间】:2019-01-28 15:29:50 【问题描述】:

我正在尝试将POST 的值设置为ASP NET Core ControllerController 不断获得 null 值,我不明白为什么。

发送请求

 string uri = "/api/create";
//some POCO--not important 
  CampaignRequest<CreateCampaignParams> req = new 
  CampaignRequest<CreateCampaignParams>  Data = campaignParams, Ticket = this.ticket ;

  var content = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json");
  var response = await this.http.PostAsync(uri, content);

接收者

   [HttpPost]
   [Route("api/create")]
   public async Task<long> CreateAsync([FromBody]CampaignRequest<CreateCampaignParams>pars)
   
    //--- the received argument is null...i have tried putting as a string argument to no avail
      try
      
        var client = new CampaignClient(uri,pars.Ticket.Value);
        long rez=await client.CreateCampaignAsync(pars.Data);
        return rez;   
      
      catch (Exception)
      
        return 0;
      

我试过将Controller方法的参数设置为字符串,然后反序列化,字符串还是空的。 如何在控制器中检索StringContent

【问题讨论】:

【参考方案1】:

最可能的原因是模型绑定错误。

要检查这一点,请修改您的控制器方法,如下所示:

[HttpPost]
[Route("api/create")]
public async Task<long> CreateAsync([FromBody]CampaignRequest<CreateCampaignParams> pars)

     var errorCount = ModelState.ErrorCount;

并在 errorCount 行设置断点,如果计数 > 0,则进一步检查 ModelState 对象是否存在特定错误。

另外,您确定您的 POST 请求使用 F12 浏览器工具将您的对象正确添加到正文中。如果不确定,请附上截图。

【讨论】:

确实有一个错误。Ticket 只是string 的包装,ValidationState 无效。

以上是关于如何在控制器中检索 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 检索 POST 请求的数据内容?

如何检索 HTML POST 数据以在 ASP.NET WebForms 中进行操作?

无法在 django 视图中从 POST 检索数据

如何在 iOS 中检索数据并将数据传递给标签栏控制器的子视图?

如何调用ajax从数据库中检索数据

如何检索使用 CURL 传递的 NodeJS 中的 POST 数据?