Spóźniłem się z tym, ale miałem podobne problemy i po całym dniu przeszukiwania wielu odpowiedzi tutaj i zdobywania tła znalazłem najłatwiejsze / najlżejsze rozwiązanie, aby przekazać jeden lub więcej parametrów do Web API 2 Działanie jest takie jak następuje:
Zakłada się, że wiesz, jak skonfigurować kontroler / działanie interfejsu API sieci Web z prawidłowym routingiem, jeśli nie, patrz: https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with -aspnet-web-api / tutorial-your-first-web-api .
Najpierw działanie kontrolera, to rozwiązanie wymaga również biblioteki Newtonsoft.Json.
[HttpPost]
public string PostProcessData([FromBody]string parameters) {
if (!String.IsNullOrEmpty(parameters)) {
JObject json = JObject.Parse(parameters);
// Code logic below
// Can access params via json["paramName"].ToString();
}
return "";
}
Po stronie klienta za pomocą jQuery
var dataToSend = JSON.stringify({ param1: "value1", param2: "value2"...});
$.post('/Web_API_URI', { '': dataToSend }).done(function (data) {
console.debug(data); // returned data from Web API
});
Kluczowym problemem, jaki znalazłem, było upewnienie się, że wysyłasz tylko jeden ogólny parametr z powrotem do interfejsu API sieci Web i upewnij się, że nie ma on nazwy tylko wartość, w { '': dataToSend }
przeciwnym razie twoja wartość będzie zerowa po stronie serwera.
Dzięki temu możesz wysłać jeden lub wiele parametrów do interfejsu API sieci Web w strukturze JSON i nie musisz deklarować żadnych dodatkowych obiektów po stronie serwera do obsługi złożonych danych. JObject umożliwia także dynamiczne iterowanie wszystkich przekazywanych parametrów, umożliwiając łatwiejszą skalowalność w przypadku zmiany parametrów w czasie. Mam nadzieję, że to pomaga komuś, kto walczył tak jak ja.