Mam usługę Web API, do której próbuję uzyskać dostęp za pomocą konsoli za pomocą RestSharp. Mój kod RestSharp wygląda następująco:Wywołania Web API z RestSharp - dodaje aplikację/json do treści powodującej parametr null w działaniu
RestClient client = new RestClient(baseUrlString);
RestRequest request = new RestRequest("controllername/actionname");
request.RequestFormat = DataFormat.Json;
ProcessQuestion model = new ProcessQuestion()
{
Id = "123456",
InstanceId = "123",
UniqueId = "bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626",
PostedAnswer = new Dictionary<string, string>() { { "question_7907_1", "selected" }, { "question_7907_2", "selected" } }
};
request.AddBody(model);
var response = client.Execute(request)
Moja czynność w interfejsie API sieci Web ma model, który ma takie same parametry jak powyższy model. Po wywołaniu połączenie nie powiedzie się, a parametr jest pusty. Podejrzewam, że to ze względu na sposób RestRequest.AddBody poprzedzenie application/json do wartości ciała, jak pokazano poniżej:
{application/json={"Id":"123456","InstanceId":"123","UniqueId":"bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626","PostedAnswer":{"question_7907_1":"selected","question_7907_2":"selected"}}}
Gdybym Post używając Skrzypek ciało wiąże się z modelem poprawnie. Poniżej jest wartością ciało I, pod warunkiem w Skrzypek:
{'Id':'123456','InstanceId':'123','Uniqueid':'bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626','PostedAnswer':{'question_7907_1':'selected','question_7907_2':'selected'}}
pamiętać, że wartość ciało w Skrzypek jest taka sama, z wyjątkiem poprzedzenie klawisz application/json.
Uwaga: próbowałem czegoś, co wydaje się być wszystkim ... Rozdzieliłem parametry w akcji, użyłem atrybutów FromBody i FromUri, wypróbowałem niestandardowe DictionaryModelBinder, wypróbowałem niestandardowe ValueBinders, próbowałem zmienić sposób m przy użyciu RestSharp (AddParameter z parametrem RequestBody, AddObject, różnymi stylami URL itp.).
Czy ktoś inny to napotkał, a jeśli tak, czy rozwiązał go? Wybrałem Web API dla tej usługi z nadzieją, że modelowanie będzie działało tak jak w MVC, ale widzę, że tak nie jest.
Dzięki
EDIT (rozwiązany): RestSharp automatycznie używa JsonSerializer obiektów przekazanych w metodzie AddBody. Pomyślałem, że brakuje mi czegoś prostego, i rzeczywiście byłem ... Dodanie parametru Method.Post do instancji RestRequest rozwiązało problem.
RestSharp automatycznie wykorzystuje JsonSerializer obiektów przekazywane w sposobie AddBody. Pomyślałem, że brakuje mi czegoś prostego, i rzeczywiście byłem ... Dodanie parametru Method.Post do instancji RestRequest rozwiązało problem. Dzięki. –