У нас есть приложение MVC (MVC4), которое иногда может отправлять события JSON, отправленные сторонней организацией по нашему конкретному URL (" http://server.com/events/ "). Событие JSON находится в теле HTTP POST, а тело - строго JSON (Content-Type: application/json
- не пост-форма с JSON в некотором строковом поле).
Как я могу получить тело JSON внутри тела контроллера? Я попробовал следующее, но ничего не получил
[Редактировать]: Когда я сказал, что ничего не получил, я имел в виду, что jsonBody всегда равен null, независимо от того, определяю ли я его как Object
или string
.
[HttpPost]
// this maps to http://server.com/events/
// why is jsonBody always null ?!
public ActionResult Index(int? id, string jsonBody)
{
// Do stuff here
}
Обратите внимание, что я знаю, если я дам объявление метода со строго типизированным входным параметром, MVC выполняет весь анализ и фильтрацию, т.е.
// this tested to work, jsonBody has valid json data
// that I can deserialize using JSON.net
public ActionResult Index(int? id, ClassType847 jsonBody) { ... }
Однако JSON, который мы получаем, очень разнообразен, поэтому мы не хотим определять (и поддерживать) сотни различных классов для каждого варианта JSON.
Я проверяю это с помощью следующей команды curl
(с одним вариантом JSON здесь)
curl -i -H "Host: localhost" -H "Content-Type: application/json" -X POST http://localhost/events/ -d '{ "created": 1326853478, "data": { "object": { "num_of_errors": 123, "fail_count": 3 }}}