Web-Api-FromBody ist null von web-client
Hallo, ich würde gerne zu call-Web-Api-Methode aus C# - client von meinem Körper-variable in web-api-controller null ist, die ganze Zeit.
Wie Sie es richtig ?
client-Seite:
IFileService imgService = new ImageServiceBll();
var image = System.Drawing.Image.FromFile(serverFile);
var dataImage = imgService.ImageToBase64(image, System.Drawing.Imaging.ImageFormat.Png);
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://site.local/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//HTTP POST
var data = new
{
imageData = dataImage,
version = version
};
HttpResponseMessage response = await client.PostAsJsonAsync("api/contenttool/SaveImage", data);
if (response.IsSuccessStatusCode)
{
Uri gizmoUrl = response.Headers.Location;
}
}
Server-Seite:
public class ContentToolController : ApiController
{
public IFileService FileService { get; set; }
//POST api/contenttool
public string SaveImage([FromBody]string data)
{
JObject jObject = JObject.Parse(data);
JObject version = (JObject)jObject["version"];
return "-OK-" + version;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es hat mehr mit der Tatsache zu tun, dass Sie technisch nicht übergeben einer Zeichenfolge. Sie sind übergehend in ein JSON-serialisierten string-Darstellung eines anonymen Typs, so der Deserialisierung in der Web-Api ist gegen Sie arbeiten. Durch die Zeit, Ihre Anfrage wird an den controller und die Methode, es ist kein string mehr. Versuchen Sie, Ihre Art auf die SavImage Methode dynamisch zu sein. Wie diese:
Leider an diesem Punkt werden Sie nicht in der Lage, verwenden Sie intellisense, um Ihre Eigenschaften aus. Sie haben, um die Daten aus den dynamischen Typ über ein Wörterbuch.
Natürlich die andere Möglichkeit wäre, eine eigentliche Art, die geteilt wurde, zwischen dem client und dem server. Würde, dass diese ein bisschen leichter.
Den string-Wert übergeben, der Körper muss sich wahrscheinlich ein Präfix mit der
=
Zeichen.Hello World
im Körper, übergeben Sie es als=Hello World
.SavImage
Methode ohne[FromBody]
Attribut (das ist wirklich entwickelt, für die übergabe von einfachen Werten). Web-API kümmern sollte, ist die Serialisierung.