正文中的Curl API请求值始终为null

时间:2017-11-13 10:51:46

标签: json curl http-post asp.net-core-mvc .net-core

我有以下控制器我正在尝试使用Curl来测试它。问题是,financialId总是为null,而不是从curl读取我的帖子。

Controler:

  [Route("api/token")]
  public class TokenController : Controller
  {
    [HttpPost("changefiscal")]
    [Authorize]
    public async Task<ActionResult> ChangeFiscal([FromBody] long fiscalId)
    {
      //fiscalId is always 0
    }
  }

我检查了文档here,该文档说使用-d参数并将其作为json对象发布。不幸的是那不起作用

  

curl -d'{“key1”:“value1”,“key2”:“value2”}' - H“Content-Type:application / json”-X POST http://localhost:3000/data

我试过了

curl -d "fiscalId=21875" -H "Content-Type: application/json" -H "Authorization: Bearer XXX" -X POST -i http://localhost:5000/api/token/changefiscal

curl -d "{"fiscalId":"21875"}" -H "Content-Type: application/json" -H "Authorization: Bearer XXX" -X POST -i http://localhost:5000/api/token/changefiscal

curl -d "{"fiscalId":"21875"}" -H "Content-Type: application/json" -H "Authorization: Bearer XXX" -X POST -i http://localhost:5000/api/token/changefiscal

curl -d "{\"fiscalId\":\"21875\"}" -H "Content-Type: application/json" -H "Authorization: Bearer XXX" -X POST -i http://localhost:5000/api/token/changefiscal

以及我能想到的其他一切

我可以在日志中看到它似乎正在发送它

  
      
  • 重建网址为:POST /
  •   
  • 不支持名称查找超时
  •   
  • getaddrinfo(3)POST失败:80
  •   
  • 无法解析主机'POST'
  •   
  • 关闭连接0卷曲:(6)无法解析主机'POST'
  •   
  • 不支持名称查找超时
  •   
  • 尝试:: 1 ...
  •   
  • TCP_NODELAY设置
  •   
  • 尝试127.0.0.1 ...
  •   
  • TCP_NODELAY设置
  •   
  • 连接到localhost(127.0.0.1)端口5000(#1)      
        

    POST / api / token / changefiscal HTTP / 1.1     主持人:localhost:5000     User-Agent:curl / 7.53.1     接受: /     Content-Type:application / json     授权:承载eyJhbGciOiJSUzI1NiIsImtpZCI6IjI2OTAzNzc0NjYyNzc4RDM1MzE2QUUwQUU1MjIyQUU1REIzM0M0NUEiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJKcEEzZEdZbmVOTlRGcTRLNVNJcTVkc3p4Rm8ifQ.eyJuYmYiOjE1MTA1NjcxNzMsImV4cCI6MTUxMDU3MDc3MywiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9yZXNvdXJjZXMiLCJ0ZXN0YXBpIl0sImNsaWVudF9pZCI6IlNlcnZpY2VBY2NvdW50QWNjZXNzIiwic3ViIjoiMjEyNDg1ODIiLCJhdXRoX3RpbWUiOjE1MTA1NjcxNzMsImlkcCI6ImxvY2FsIiwibmFtZSI6ImxpbGF3IiwiZS1tYWlsIjoibGlsYXdAZWcuZGsiLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwidGVzdGFwaSJdLCJhbXIiOlsicGFzc3dvcmQiXX0.Q_oJ-xOIKdTtGoRqJbtNjwLV82cQQLhJUVl2Ey-4riZdp45rPIrmfOw9VdknUOLpm8RYZ0iLFC31gCpn1vKb4zLiTmBuTuzYsKxnAvf-UkCj1L8soH4W2lCvx560bZeS7B67tJ4nK9t36OiMLQY4m-_NRTSRBs5QtsXBd5VQGPsTpxf_MxVbQm6Hj6Ot3FGRIa08gmwD3iEr9vsCU6732InbGzU26wtm-WLWp_A_k66Z29G8ms_U8x6gg-aOlQG9_0v_DEjTXCkKNcgWoL0IvaCC0psiYkdIjQxaOwz-e_fcqXpKEFmuoSqmGd1l-eMl3HimOomdOHwqploWGxnJ4Q     内容长度:7

      
  •   
  • 上传已完全发送:7个字节中的7个
  •   

然而,当我检查fiscalId时,它总是0,我甚至试图将fiscalId更改为字符串,它只是null。

2 个答案:

答案 0 :(得分:2)

当您将数据作为JSON对象发布时,如-d '{"fiscalId": 21875}',您的操作方法应该期望一些具有相应属性的简单类。在你的情况下:

public class Dto
{
   public long fiscalId {get; set;}
}

public async Task<ActionResult> ChangeFiscal([FromBody] Dto data)

答案 1 :(得分:0)

最后经过一个多小时的玩法后,我得到了它,即使内容类型是json,它只是作为字符串"'21875'"发送,即使所有文档显示将其发送为JSon。由于某种原因,API无法将其作为JSon对象读取,但希望它只是作为字符串发送。

curl POST -v -d "'21875'" -H "Content-Type: application/json" -H "Authorization: Bearer XXX" http://localhost:5000/api/token/changefiscal