如何在 Webhook 中接收 json post 数据

sto*_*tom 4 asp.net-mvc json json.net asp.net-mvc-4 kraken-image-optimizer

我们正在使用第 3 方 api kraken.io来优化我们的图像。

优化图像的结果发布在Webhook.

在他们的API文档它规定:优化过海妖后,将POST消息到callback_url在一个你的要求指定的JSON格式application/json

我正在使用ngrok 允许远程webhooks发送数据到我的开发机器,使用这篇文章。

发布到回调 URL 的结果:

HTTP/1.1 200 OK

{
    "id": "18fede37617a787649c3f60b9f1f280d",
    "success": true,
    "file_name": "header.jpg",
    "original_size": 324520,
    "kraked_size": 165358,
    "saved_bytes": 159162,
    "kraked_url": "http://dl.kraken.io/18/fe/de/37617a787649c3f60b9f1f280d/header.jpg"
}
Run Code Online (Sandbox Code Playgroud)

类到映射

public class KrakenOptimizedResults
{
public string id { get; set; }
public bool success { get; set; }
public string file_name { get; set; }
public int original_size { get; set; }
public int kraked_size { get; set; }
public int saved_bytes { get; set; }
public string kraked_url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

动作方法

[HttpPost]
public ActionResult OptimizedWebHook()
{

  Request.InputStream.Position = 0;

  string jsonString = new System.IO.StreamReader(Request.InputStream).ReadToEnd();

  KrakenOptimizedResults obj = new JavaScriptSerializer().Deserialize<KrakenOptimizedResults>
  (jsonString);


  return Json(obj);

 }     
Run Code Online (Sandbox Code Playgroud)

但是当我在 Html Visualizer 中debug收到jsonString它时,它看起来像keyvalue成对而不是 Json 格式。

收到的结果不是 Json 格式的:

file_name=header.jpeg&original_size=118066&kraked_size=102459&saved_bytes=15607
Run Code Online (Sandbox Code Playgroud)

我猜收到的数据content-type:application/x-www-form-urlencoded.

为什么我接收keyvalue配对而不是 Json 格式?如何在 asp.net mvc 中反序列化 Json 数据?

kar*_*m79 5

https://kraken.io 的联合创始人在这里。

我们的文档中有一个明显的遗漏,我将在今天修复。要取回 JSON,您需要"json": true在请求中设置一个标志。省略该标志或设置"json": false将返回 URLEncoded。示例 cURL 请求:

curl http://api.kraken.io/v1/upload -X POST --form data='{"auth":{"api_key":"YOUR_KEY", "api_secret":"YOUR_SECRET"}, "wait": true, "lossy": true, "callback_url": "http://requestb.in/wbhi63wb", "json": true}' --form upload=@test.jpg
Run Code Online (Sandbox Code Playgroud)

带来不便敬请谅解 :-(