I don't think I'm answering your question but what I'd like to write here is too big for a comment.
First up, ASP.NET Web API has nothing to do with session state. In fact, if session has to be used with web API, then it needs to be explicitly enabled.
Now, I have the same exact API controller like you and I host it in IIS. If I make concurrent requests, it is running the requests in parallel and not serially. Here is how I tested from Fiddler.
First, I made a GET to the API and waited for 200 status code (#1 in Fiddler left pane). Then, I selected #1 and pressed U to replay the same request unconditionally 9 times. With that I have 10 requests in the left pane (#1 through #10). Then, I selected all 10 of them and pressed R to reissue all the ten requests in parallel. I then selected requests 11 through 20 in the left pane and went to Timeline tab. I see this graph.
PS. I tested the web API running locally, BTW.

Next, I wanted to log the time stamp request as received by the action method. So, I modified action method to return a string like this.
public string Get()
{
string ts = DateTime.Now.ToString("mm:ss.fff");
Thread.Sleep(2000);
return ts;
}
I got the following.
00:43.795
00:43.795
00:45.812
00:44.517
00:43.795
00:43.795
00:45.515
00:43.795
00:43.795
00:43.795
To me this means, all the requests are running in parallel.