Ich mache eine MVC 5-Anwendung, und ich rufe eine API-Controller-Methode, die in einer anderen Lösung ist.MVC Api Controller Serialisierte Parameter
Ich verwende HttpClient()
. und ich rufe PostAsJsonAsync
mit einigen Parametern, eine Instanz einer Klasse.
Es sieht so aus.
string apiUrl = "localhost:8080/api/";
ContactWF contactWF = new contactWF();
contactWF.contact_id=0;
contactWF.UserOrigin_id=20006
contactWF.ProcessState_id=2;
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsJsonAsync(apiUrl + "Contact/Method", contactWF);
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<int>().Result;
}
}
Meine API-Controller-Methode ist wie folgt.
HttpResponseMessage response = await client.PostAsJsonAsync(apiUrl + "Contact/Method", contactWF);
mit diesem
string jsonData = JsonConvert.SerializeObject(contactWF);
HttpResponseMessage response = client.PostAsJsonAsync("api/Contact/Method", jsonData).Result;
I
[ActionName("Method")]
[HttpGet]
public int Method([FromBody] ContactWF userwf)
{
return 10;
}
es funktioniert gut ...
Mein Problem ist, wenn ich Serialized der Parameter Klasseninstanz versuchen I Linie ersetzen habe eine Error:405
...
Es sieht wie die Json
Zeichenfolge aus, die es nicht als Parameter erkennt.
Meine Json-Zeichenfolge sieht so aus.
"{\"Contact_id\":0,\"Description\":null,\"ProcessState_id\":2,\"Type_id\":0,\"Object_id\":0,\"Parent_id\":null}"
das ist ContactWD Klassenkonverter zu json.
Was ist los?
Danke ... Also ich war serialzing zweimal ... aber, was ich nicht verstehe ist, dass, wenn ich PostAsJsonAsync, In api-Controller verwenden Methode Ich sollte eine Zeichenfolge erhalten?Jetzt, ich bekomme eine Instanz der gleichen Klasse ... Danke – Diego
Web API Deserialize Anfrage JSON Körper zu Methode argumet Klasse. Wenn Sie es als 'public int-Methode ([FromBody] string userwf) erklären' dann funktioniert Ihre zweite Variante mit zweimal serialisierten Objekt und Sie werden in serialisierten Objekt userwf bekommen. –