title: What should `ReadAsAsync<string>` and `ReadAsStringAsync` be used for?
body: <p>What should <code>HttpContentExtensions.ReadAsAsync&lt;string&gt;</code> and <code>HttpContent.ReadAsStringAsync</code> be used for?</p>
  
  <p>They would seem to do similiar things but work in curious ways. A couple of tests and their outputs are below. In some cases <code>JsonReaderException</code> are thrown, in some cases, the JSON is output but with additional escape characters. </p>
  
  <p>I've ended up using both functions across my code base, but was hoping to align on one if I could understand how they were supposed to work.</p>
  
  <pre><code>//Create data and serialise to JSON
  var data = new
  {
      message = "hello world"
  };
  string dataAsJson = JsonConvert.SerializeObject(data);
  
  //Create request with data
  HttpConfiguration config = new HttpConfiguration();
  HttpRequestMessage request = new HttpRequestMessage();
  request.SetConfiguration(config);
  request.Method = HttpMethod.Post;
  request.Content = new StringContent(dataAsJson, Encoding.UTF8, "application/json");
  
  string requestContentT = request.Content.ReadAsAsync&lt;string&gt;().Result; // -&gt; JsonReaderException: Error reading string.Unexpected token: StartObject.Path '', line 1, position 1.
  string requestContentS = request.Content.ReadAsStringAsync().Result; // -&gt; "{\"message\":\"hello world\"}"
  
  //Create response from request with same data
  HttpResponseMessage responseFromRequest = request.CreateResponse(HttpStatusCode.OK, dataAsJson, "application/json");
  
  string responseFromRequestContentT = responseFromRequest.Content.ReadAsAsync&lt;string&gt;().Result; // -&gt; "{\"message\":\"hello world\"}"
  string responseFromRequestContentS = responseFromRequest.Content.ReadAsStringAsync().Result; // -&gt; "\"{\\\"message\\\":\\\"hello world\\\"}\""
  
  //Create a standalone new response
  HttpResponseMessage responseNew = new HttpResponseMessage();
  responseNew.Content = new StringContent(dataAsJson, Encoding.UTF8, "application/json");
  
  string responseNewContentT = responseNew.Content.ReadAsAsync&lt;string&gt;().Result; // -&gt; JsonReaderException: Error reading string.Unexpected token: StartObject.Path '', line 1, position 1.
  string responseNewContentS = responseNew.Content.ReadAsStringAsync().Result; // -&gt; "{\"message\":\"hello world\"}"
  </code></pre>