Как передать json в метод POST ASP.NET Web API

В интернете куча вопросов по поводу передачи произвольной строки json в asp.net web api. Тема на самом деле больная. На днях столкнулся с такой задачкой и решил сделать небольшой пост чтобы было куда подсмотреть в будущем.

Если ваш метод выглядит примерно так :

То действительно ничего не выйдет. В метод web api постоянно будет приходить null.  Так в чём же дело ?

А вот в чём. ASP.NET Web API пытается конвертировать пришедшую json строчку в экземпляр описанной вами модели, соответственно если модель не находится, то и конвертировать не во что, поэтому получаем null.

Конечно круто когда json превращается в класс, но бывают случаи когда этого делать не нужно.

Одним из решений проблемы может служить приведение входного json параметра к JToken (Newtonsoft.Json.Linq.JToken). Вот так нужно трансформировать метод чтобы json не превращался в null :

Также можно почитать:

  • Филипп Игнатенко

    Илья, благодарю за статью! Кто бы мог подумать, что метод пытается десериализовать параметр самостоятельно.
    Хотелось бы добавить, что пытаясь передавать в методе строковое значение, можно указывать в ContentType, например, «application/x-www-form-urlencoded». В таком случае сервер будет успешно принимать строку в методе, если сигнатура метода будет соответствующей.
    Но при способе, описанном в статье, сигнатура метода на сервере может описывать входной параметр типа десериализованного объекта, а код, вызывающий этот метод, может передавать сериализованную json-строку, при условии, что ContentType в веб-запросе будет иметь значение «application/json». В таком случае самостоятельная десериализация объекта серверным методом пройдет успешно.

    • Спасибо!