Ich versuche, von einem Client zu einem Web-API-Methode zu schreiben, wie folgt:POST Web API Aktion mit IEnumerable <Interface> Typ Parameter
// Create list of messages that will be sent
IEnumerable<IMessageApiEntity> messages = new List<IMessageApiEntity>();
// Add messages to the list here.
// They are all different types that implement the IMessageApiEntity interface.
// Create http client
HttpClient client = new HttpClient {BaseAddress = new Uri(ConfigurationManager.AppSettings["WebApiUrl"])};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Post to web api
HttpResponseMessage response = client.PostAsJsonAsync("Communications/Messages", messages).Result;
// Read results
IEnumerable<ApiResponse<IMessageApiEntity>> results = response.Content.ReadAsAsync<IEnumerable<ApiResponse<IMessageApiEntity>>>().Result;
My Web API Controller-Aktion wie folgt aussieht:
public HttpResponseMessage Post([FromBody]IEnumerable<IMessageApiEntity> messages)
{
// Do stuff
}
Das Problem, das ich habe, ist, dass messages
immer leer ist (aber nicht null), wenn Sie in die Web-API-Controller-Aktion kommen. Ich habe im Debugger verifiziert, dass das Objekt messages
auf der Client-Seite Elemente enthält, bevor es gepostet wird.
Ich vermute, es könnte etwas damit zu tun haben, dass der Interface-Typ beim Versuch, die Objekte zu übergeben, nicht in einen konkreten Typ konvertiert wird, aber ich weiß nicht, wie ich das machen soll. Wie kann ich das erreichen?
Danke. Klappt wunderbar. Hat mir sehr geholfen. –
Anstatt einen neuen 'SerializerSettings' zu instanziieren, empfehle ich, den Standard zu aktualisieren (greifen Sie einfach darauf zu, wie Sie es in' WebApiConfig.cs' tun).Auf diese Weise verlieren Sie keine anderen Standard-Serializer-Einstellungen. –