हैलो मैं वेब एपीआई नियंत्रक में अपने बॉडी वैरिएबल द्वारा सी # क्लाइंट से वेब एपीआई विधि को कॉल करना चाहता हूं, हर समय शून्य है। इसे कैसे सेट करें? ग्राहक के पक्ष:वेब एपी से बॉडी वेब क्लाइंट से शून्य है
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;
}
}
सर्वर साइड:
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;
}
}
अच्छा बिंदु, लेकिन मुझे पता चला कि PostAsJsonAsync को एक स्ट्रिंग की तरह param भेजना ठीक है, यह ठीक काम करेगा। –
आप वास्तव में सिस्टम के खिलाफ काम कर रहे हैं। या तो एक स्ट्रिंग के रूप में डेटा भेजें और स्ट्रिंग के रूप में बाध्य करें, या JSON के रूप में भेजें और वेबएपीआई पक्ष पर उसी डेटा ऑब्जेक्ट से जुड़ें। दूसरा तरीका यह करने का सही तरीका है। इस प्रकार आप अपनी एक्शन विधि में विशिष्ट जेसन मैनिपुलेशन कोड लिखने से बचते हैं, फ्रेमवर्क आपके लिए ऐसा करता है। –
@YishaiGalatzer मैं इसके साथ सबसे अधिक भाग के लिए सहमत हूं, लेकिन अगर मैं वस्तुओं की एक सूची को क्रमबद्ध करना चाहता हूं, तो यह मुझे सूची रखने के लिए बस एक नया मॉडल बनाने के लिए मजबूर करेगा! ऐसा लगता है कि यह पागल नहीं है? – Chris