See the question and my original answer on StackOverflow

In my case, I had a web site with ODATA routes (and controllers), and other API routes (and controllers). What happened was my other routes were simply conflicting with ODATA ones, even with different C# namespaces and classes, etc.

Initially my controller was like this for example:

public class UserController : ApiController
{
    [HttpPost]
    public void Create([FromBody] string email)
    {
    }
}

I also had a "User" route in ODATA somewhere (different namespace, different urls, etc.). So I had to add explicitely the Route attribute, like this:

public class UserController : ApiController
{
    [HttpPost]
    [Route("api/user/create")]
    public void Create([FromBody] string email)
    {
    }
}