Oli
Since both your routes are attribute routes, they have no implicit order since both of them have the same number of path segments they both match leading to ambiguity.
The solution is to differentiate between them, what you did was to add constraints to only one of the routes match, another solution is to use order so first the more specific route (the one ending with /Children/ChildrenDataFormat).
Here is a simplistic example that shows order and how route values are being captures
public class ValuesController : ApiController
{
[Route("api/values/MyName", Order = 1)]
[Route("api/values/{name}", Order = 2)]
public string Get()
{
object nameObj;
Request.GetRouteData().Values.TryGetValue("name", out nameObj);
if (nameObj != null)
{
// came from second route
return "Route is {name} and name was: " + (string) nameObj;
}
else
{
return "Route is MyName so no name value is available";
}
}
}