2012-09-13 10 views
22

एक सुंदर ठेठ सीआरयूडी ऑपरेशन के परिणामस्वरूप एक ऑब्जेक्ट को एक बार जारी रखने के बाद अपना आईडी सेट हो जाएगा।वेब एपीआई का उपयोग करते समय मैं POST से HttpResponseMessage से सामग्री कैसे निकालूं?

तो अगर मेरे पास नियंत्रक पर पोस्ट विधि है जो किसी ऑब्जेक्ट को स्वीकार करता है (JSON serialized, कहें) और HttpStesusCode के साथ एक HttpResponseMessage देता है और उसी ऑब्जेक्ट पर सामग्री सेट को शून्य से एक पूर्णांक में अपडेट किया गया है, तो मैं कैसे करूं उस आईडी मान पर जाने के लिए HttpClient का उपयोग करें?

यह शायद काफी सरल है लेकिन मैं देखता हूं कि System.Net.Http.StreamContent है। पोस्ट विधि से एक इंट वापस करने के लिए बेहतर है?

धन्यवाद।

अद्यतन (निम्नलिखित जवाब):

एक काम कर रहे उदाहरण ...

namespace TryWebAPI.Models { 
    public class YouAreJoking { 
     public int? Id { get; set; } 
     public string ReallyRequiresFourPointFive { get; set; } 
    } 
} 

namespace TryWebAPI.Controllers { 
    public class RyeController : ApiController { 
     public HttpResponseMessage Post([FromBody] YouAreJoking value) { 
      //Patience simulated 
      value.Id = 42; 

      return new HttpResponseMessage(HttpStatusCode.Created) { 
       Content = new ObjectContent<YouAreJoking>(value, 
          new JsonMediaTypeFormatter(), 
          new MediaTypeWithQualityHeaderValue("application/json")) 
      }; 
     } 
    } 
} 

namespace TryWebApiClient { 
    internal class Program { 
     private static void Main(string[] args) { 
      var result = CreateHumour(); 
      Console.WriteLine(result.Id); 
      Console.ReadLine(); 
     } 

     private static YouAreJoking CreateHumour() { 
      var client = new HttpClient(); 
      var pennyDropsFinally = new YouAreJoking { ReallyRequiresFourPointFive = "yes", Id = null }; 

      YouAreJoking iGetItNow = null; 
      var result = client 
       .PostAsJsonAsync("http://localhost:1326/api/rye", pennyDropsFinally) 
       .ContinueWith(x => { 
           var response = x.Result; 
           var getResponseTask = response 
            .Content 
            .ReadAsAsync<YouAreJoking>() 
            .ContinueWith<YouAreJoking>(t => { 
             iGetItNow = t.Result; 
             return iGetItNow; 
            } 
       ); 

       Task.WaitAll(getResponseTask); 
       return x.Result; 
      }); 

      Task.WaitAll(result); 
      return iGetItNow; 
     } 
    } 
} 

लगता Node.js प्रेरित किया।

उत्तर

48

आप उपयोग कर सकते हैं ReadAsAsync<T>

नेट 4 (आप ​​कर सकते हैं कि रूप में अच्छी तरह निरंतरता के बिना)

var resultTask = client.PostAsJsonAsync<MyObject>("http://localhost/api/service",new MyObject()).ContinueWith<HttpResponseMessage>(t => { 
    var response = t.Result; 
    var objectTask = response.Content.ReadAsAsync<MyObject>().ContinueWith<Url>(u => { 
     var myobject = u.Result; 
     //do stuff 
    }); 
}); 

नेट 4,5

var response = await client.PostAsJsonAsync<MyObject>("http://localhost/api/service", new MyObject()); 
    var myobject = await response.Content.ReadAsAsync<MyObject>(); 
+4

दरअसल - CodePlex पर कुछ सरकारी नमूने हैं यहां .NET 4.0 और 4.5 दोनों के लिए http://blogs.msdn.com/b/webdev/archive/2012/08/26/asp-net-web-api-and-httpclient-samples.aspx –

+0

हाँ। धन्यवाद मार्क। वे नमूने वही थे जो मैं खोज रहा था। किसी भी तरह उन्हें याद किया। – ofraski

संबंधित मुद्दे