Witam Chciałbym nazwać metodę Web Api z klienta C# przez moją zmienną body w kontrolerze web api jest null cały czas. Jak ustawić poprawność? strona klient:Web Api FromBody ma wartość zerową z klienta WWW
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;
}
}
dobry punkt, ale znalazłem, jeśli wysłać param jak ciąg do PostAsJsonAsync to działałoby dobrze. –
Naprawdę działasz przeciwko systemowi. Wyślij dane jako ciąg i połącz jako ciąg, LUB wyślij jako JSON i połącz z tym samym obiektem danych po stronie interfejsu WebAPI. Drugi sposób to właściwa droga. W ten sposób unikasz pisania określonego kodu manipulacji jsonem w swojej metodzie akcji, framework jest tam, robisz to za ciebie. –
@ YishaiGalatzer Zgadzam się w większości z tym, ale jeśli chcę serializować listę obiektów, zmusiłoby mnie to do stworzenia nowego modelu po prostu do przechowywania listy! To wydaje się szalone, prawda? – Chris