代码之家  ›  专栏  ›  技术社区  ›  Jet813

当类型为字符串时,来自Webhook的JSON帖子为null

  •  -1
  • Jet813  · 技术社区  · 3 年前

    我正在使用。NET 5 web api。我有一个webhook,可以发布到我的api。然而,当我收到字符串中的帖子时,它是空的。如果我创建一个类,那么。Net将为我解析JSON,但我 需要 字符串,而不是对象。非常感谢您的任何建议!

    JSON POST示例(应用程序/JSON;字符集=UTF-8):

    {
        "user_ip": "00.00.00.00",
        "date_start": "2022-01-01T14:05:27.546Z",
        "user_referrer": "N/A",
        "user_os": "Windows (deprecated)",
        "id": "000001",
        "items": [
            {
                "id": "1",
                "position": 2,
                "value": "01/01/2022"
            },
            {
                "id": "0",
                "position": 8,
                "value": "Smith"
            },
            {
                "id": "1",
                "position": 22,
                "value": "7843377133"
            },
            {
                "values": [
                    {
                        "position": 2,
                        "value": "Coffee"
                    },
                    {
                        "position": 5,
                        "value": "Tea"
                    }
                ],
                "id": "14",
                "position": 7
            },
            {
                "id": "15",
                "position": 8,
                "value": "This is a test for API"
            }
        ],
        "user_device": "Desktop"
    }
    

    端点- val 类型字符串为时为null:

        [ApiController]
        [Route("api/webhooks/[controller]")]
        public class FormController : BaseApiController
        {
           
            [HttpPost("Form")]
            public async Task<ActionResult> Form([FromBody] string val)
            {
    
               
                FormDataModel FS = new FormDataModel(){
    
                    ResultJsonString = val  
                   
                };
    
                 return Ok(new {Data = FS});
    
            }
    
    2 回复  |  直到 3 年前
        1
  •  1
  •   Serge    3 年前

    例如,您只能使用JObject输入参数,并使用ToString()将其转换为json

    public async Task<ActionResult> Form([FromBody] JObject val)
    {
              ResultJsonString = val.ToString();
             .... another code  
    }
    

    另一种方法是在发布到API之前序列化两次,在这种情况下,可以将字符串作为val,但这是非常糟糕的编码样式。

        2
  •  0
  •   luke    3 年前

    您需要一个模板对象来反序列化json,然后可以作为所创建对象的成员访问该字符串。i、 e。

    [ApiController]
        [Route("api/webhooks/[controller]")]
        public class FormController : BaseApiController
        {
           
            [HttpPost("Form")]
            public async Task<ActionResult> Form([FromBody] CustomObject val)
            {
    
               
                FormDataModel FS = new FormDataModel(){
    
                    ResultJsonString = val.items[0].value 
                    //or whatever path it is to the string you're interested in
                   
                };
    
                 return Ok(new {Data = FS});
    
            }