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它时,它看起来像key和value成对而不是 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.
为什么我接收key和value配对而不是 Json 格式?如何在 asp.net mvc 中反序列化 Json 数据?
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)
带来不便敬请谅解 :-(