Wie extrahiere ich Inhalte aus HttpResponseMessage aus dem POST, wenn ich die WEB-API verwende?

Eine ziemlich typische CRUD-Operation führt dazu, dass die ID eines Objekts festgelegt wird, sobald sie bestehen bleibt.

Wenn ich also eine Post-Methode auf dem Controller habe, die ein Objekt akzeptiert (z. B. JSON serialisiert) und eine HttpResponseMessage mit HttpStatusCode Created und Content zurückgibt, die auf dasselbe Objekt gesetzt ist, wobei die ID von null auf eine Ganzzahl aktualisiert wurde, wie verwende ich dann HttpClient, um zu erhalten bei diesem ID-Wert?

Es ist wahrscheinlich recht einfach, aber alles, was ich sehe, ist System.Net.Http.StreamContent. Ist es besser, nur ein Int von der Post-Methode zurückzugeben?

Vielen Dank.

Update (folgende Antwort):

Ein funktionierendes Beispiel ...

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;
        }
    }
}

Scheint Node.js inspiriert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage