2015-08-11 11 views
13

Sto cercando di inviare il seguente JSON con RestSharp:RestSharp Pubblica JSON oggetto

{"UserName":"UAT1206252627", 
"SecurityQuestion":{ 
    "Id":"Q03", 
    "Answer":"Business", 
    "Hint":"The answer is Business" 
}, 
} 

penso che io sono vicino, ma mi sembra di essere alle prese con la SecurityQuestion (l'API sta gettando un errore che dice che un parametro non è presente, ma non dice quale)

Questo è il codice che ho finora:

var request = new RestRequest("api/register", Method.POST); 
request.RequestFormat = DataFormat.Json; 

request.AddParameter("UserName", "UAT1206252627"); 

SecurityQuestion securityQuestion = new SecurityQuestion("Q03"); 
request.AddParameter("SecurityQuestion", request.JsonSerializer.Serialize(securityQuestion)); 

IRestResponse response = client.Execute(request); 

E il mio Qu Sicurezza Classe estion assomiglia a questo:

public class SecurityQuestion 
{ 
    public string id {get; set;} 
    public string answer {get; set;} 
    public string hint {get; set;} 

    public SecurityQuestion(string id) 
    { 
     this.id = id; 
     answer = "Business"; 
     hint = "The answer is Business"; 
    } 
} 

Qualcuno può dirmi che cosa sto facendo male? C'è un altro modo per pubblicare l'oggetto Domanda di sicurezza?

Molte grazie.

risposta

24

è necessario specificare il tipo di contenuto nell'intestazione:

request.AddHeader("Content-type", "application/json"); 

anche AddParameter aggiunge di inviare o querystring URL basato sul metodo

Penso che è necessario aggiungere al corpo come questo :

request.AddJsonBody(
    new 
    { 
     UserName = "UAT1206252627", 
     SecurityQuestion = securityQuestion 
    }); // AddJsonBody serializes the object automatically 
+0

Grazie per la risposta Oluwafemi, ma ancora sto ottenendo lo stesso errore (che un parametro mancante) - Lo so sembra che questo dovrebbe funzionare, ma è c'è qualcos'altro che posso provare? – SaviourSoul

+0

Puoi fornire un metodo di campionamento dell'API? – Oluwafemi

+3

Funziona per me: request.AddHeader ("Content-Type", "application/json; charset = utf-8"); request.AddJsonBody (yourobject); – AFD

15

Grazie ancora per il vostro aiuto. Per ottenere questo lavoro ho dovuto presentare tutto come un singolo parametro. Questo è il codice che ho usato alla fine.

Prima ho fatto un paio di classi denominata Object Request e Domanda di sicurezza:

public class SecurityQuestion 
{ 
    public string Id { get; set; } 
    public string Answer { get; set; } 
    public string Hint { get; set; } 
} 

public class RequestObject 
{ 
    public string UserName { get; set; } 
    public SecurityQuestion SecurityQuestion { get; set; } 
} 

Poi ho solo aggiunto come un unico parametro, e serializzato a JSON prima di postarlo, in questo modo:

var yourobject = new RequestObject 
      { 
       UserName = "UAT1206252627", 
       SecurityQuestion = new SecurityQuestion 
       { 
        Id = "Q03", 
        Answer = "Business", 
        Hint = "The answer is Business" 
       }, 
      }; 
var json = request.JsonSerializer.Serialize(yourobject); 

request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody); 

IRestResponse response = client.Execute(request); 

e ha funzionato!

1

RestSharp supportato da oggetto AddObject metodo

request.AddObject(securityQuestion);