Ho un servizio API Web che sto tentando di accedere tramite la console utilizzando RestSharp. Il mio codice RestSharp simile a questo:Chiamate API Web con RestSharp - antepone l'applicazione/json al corpo causando un parametro null sull'azione
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)
mia azione Web API prende un modello che ha gli stessi parametri del modello di cui sopra. Quando la chiamata viene eseguita, l'associazione fallisce e il parametro è nullo. Ho il sospetto che questo è dovuto al metodo RestRequest.AddBody anteponendo application/json al valore corpo come illustrato di seguito:
{application/json={"Id":"123456","InstanceId":"123","UniqueId":"bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626","PostedAnswer":{"question_7907_1":"selected","question_7907_2":"selected"}}}
Se pubblico utilizzando Fiddler il corpo si lega al modello in modo corretto. Sotto è il valore corpo ho fornito in Fiddler:
{'Id':'123456','InstanceId':'123','Uniqueid':'bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626','PostedAnswer':{'question_7907_1':'selected','question_7907_2':'selected'}}
noti che il valore corpo suonatore è lo stesso con l'eccezione del anteponendo la chiave di applicazione/json.
anche da notare: Ho provato quello che sembra come tutto ... Ho separato i parametri in azione, usato FromBody e attributi FromUri, provato personalizzati DictionaryModelBinder di, provato ValueBinders personalizzati, provato a cambiare il modo in cui I' m usando RestSharp (AddParameter con un parametro RequestBody, AddObject, diversi stili di URL, ecc.).
Qualcun altro l'ha incontrato e, in caso affermativo, l'ha risolto? Ho scelto l'API Web per questo servizio con la speranza che l'associazione modello funzionasse come in MVC, ma sto vedendo che non è il caso.
Grazie
EDIT (risolto): RestSharp utilizza automaticamente il JsonSerializer per gli oggetti passati nel metodo ADDBODY. Ho pensato che mi mancava qualcosa di semplice, e infatti ero ... Aggiungendo il parametro Method.Post all'istanza di RestRequest risolvo il problema.
RestSharp utilizza automaticamente la JsonSerializer per oggetti passati nel metodo ADDBODY. Ho pensato che mi mancava qualcosa di semplice, e infatti ero ... Aggiungendo il parametro Method.Post all'istanza di RestRequest risolvo il problema. Grazie. –