To diagnose this issue we added logs to check raw request received by us and that confirmed two things:
1. First request received by was fine but every subsequent same request was landing in our action as null2. Raw request content and headers were similar for both successful and failed requests
Below is code that I used to log raw request content:
To sort out the issue we changed our action slightly. Now instead of letting framework to do model binding for us, we started doing it manually as shown in below snippet:
Here we are reading request content as string and then converting it to our expected object using newtonsoft json converter. Hopefully this will help you to save some of your time.