Используя mvc, я получаю такие значения, чтобы избежать деклараций классов и изменений маршрутизатора.
public dynamic Create([FromBody] dynamic form)
{
var username = form["username"].Value;
var password = form["password"].Value;
var firstname = form["firstname"].Value;
...
Мне нравится перебирать все значения и проверять их на нуль или пусто.