Einfache ApiController Methode:Asp.Net Web-API-2-Modell nicht automatisch verbindlich
public class TestController : ApiController
{
public void TakeIt(MyObject o){
Console.Write(o.ToString());
}
}
Einfacher Datentyp:
public class MyObject{
public string V1{ get; set; }
public string V2{ get; set; }
}
Einfach Beitrag:
POST http://localhost:11026/api/test/takeit HTTP/1.1
Accept: application/json
Content-Type: application/json
Host: localhost:11026
{"V1":"Something","V2": "Something else"}
Aus irgendeinem Grunde der MyObject o wird nicht automatisch aus dem JSON-Formular post-body (auch mit [FromBody]
eingefügt vor dem Parameter) binden auf der Methode.
Mache ich etwas falsch?
SOLUTION (DUH!)
Um meine eingehenden Anfragen zu debuggen, hatte ich dies in meinem global.asax setzen (weil ich versagte die Anträge zu erhalten durch Fiddler fließen), so konnte ich sie zuerst prüfen
protected void Application_BeginRequest()
{
using (Stream receiveStream = Request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
var content = readStream.ReadToEnd();
Console.WriteLine(content);
}
}
}
Dies war etwas auf der ganzen Linie durch das Lesen der veröffentlichten Daten zu stoppen. Sobald ich das entfernte, funktionierte die automatische Modellbindung gut.
ich gesagt haben sollte ausdrücklich, dass ich die API Route geändert mapper zu "api/{controller}/{aktion}/{id}". Leider macht weder das Hinzufügen von [FromBody] zum Parameter noch von [HttpPost] zur Methode einen Unterschied für die Bindung meines Controllers. Ich habe das Gefühl, es ist eine Konfigurationseinstellung, die irgendwo fehlt. – Jimbo
@ Jimbo Ich würde zustimmen müssen. Es gibt nicht genug Informationen im OP für die Verwendung zu sagen, obwohl. Stellen Sie ein [mcve] bereit, mit dem Sie Ihr Problem reproduzieren und eine Lösung finden können. – Nkosi
Verdammt, ich wusste, es war etwas Einfaches ... Ich habe mehr Informationen in meinem OP erklärt, warum das nicht funktioniert.Danke für Ihr Bemühen. – Jimbo