Ciao Mi piacerebbe chiamare il metodo Web Api dal client C# dalla variabile del mio corpo nel controller web api è sempre nullo. Come impostarlo correttamente? lato client:Web Api FromBody è nullo dal client Web
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 Side:
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;
}
}
buon punto, ma ho trovato se inviare param come una stringa a PostAsJsonAsync funzionerebbe bene. –
Si sta davvero lavorando contro il sistema. Inviare i dati come stringa e associare come stringa, O inviare come JSON e associare allo stesso oggetto dati sul lato WebAPI. Il secondo modo è il modo giusto per farlo. Così eviti di scrivere codice di manipolazione json specifico nel tuo metodo di azione, il framework è lì per te. –
@YishaiGalatzer Sono d'accordo per la maggior parte con questo, ma se voglio serializzare una lista di oggetti, mi costringerebbe a creare un nuovo modello semplicemente per contenere una lista! Questo sembra pazzesco, vero? – Chris