J'essaie de publier le JSON suivant avec RestSharp:
{"UserName":"UAT1206252627",
"SecurityQuestion":{
"Id":"Q03",
"Answer":"Business",
"Hint":"The answer is Business"
},
}
Je pense que je suis proche, mais il me semble que j’ai des difficultés avec SecurityQuestion (l’API génère une erreur indiquant qu’un paramètre est manquant, mais il ne dit pas lequel).
C'est le code que j'ai jusqu'à présent:
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);
Et ma classe de question de sécurité ressemble à ceci:
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";
}
}
Quelqu'un peut-il me dire ce que je fais mal? Existe-t-il un autre moyen de publier l'objet Question de sécurité?
Merci beaucoup.
Vous devez spécifier le type de contenu dans l'en-tête:
request.AddHeader("Content-type", "application/json");
AddParameter
ajoute également à POST ou à une chaîne de requête URL en fonction de
Je pense que vous devez l'ajouter au corps comme ceci:
request.AddJsonBody(
new
{
UserName = "UAT1206252627",
SecurityQuestion = securityQuestion
}); // AddJsonBody serializes the object automatically
Merci encore pour votre aide. Pour que cela fonctionne, je devais tout soumettre comme un paramètre unique. C'est le code que j'ai utilisé à la fin.
J'ai d'abord créé deux classes appelées demande d'objet et question de sécurité:
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; }
}
Ensuite, je l'ai simplement ajouté en tant que paramètre unique et l'ai sérialisé en JSON avant de le publier, comme suit:
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);
et ça a fonctionné!
Pour poster une chaîne de corps json brute, les méthodes AddBody () ou AddJsonBody () ne fonctionneront pas. Utilisez ce qui suit à la place
request.AddParameter(
"application/json",
"{ \"username\": \"johndoe\", \"password\": \"secretpassword\" }", // <- your JSON string
ParameterType.RequestBody);
RestSharp
pris en charge à partir d'objet par la méthode AddObject
request.AddObject(securityQuestion);
Pour ce faire, le moyen le plus simple consiste à laisser RestSharp gérer l’ensemble de la sérialisation. Il vous suffit de spécifier le RequestFormat comme suit. Voici ce que j'ai proposé pour ce sur quoi je travaille. .
public List<YourReturnType> Get(RestRequest request)
{
var request = new RestRequest
{
Resource = "YourResource",
RequestFormat = DataFormat.Json,
Method = Method.POST
};
request.AddBody(new YourRequestType());
var response = Execute<List<YourReturnType>>(request);
return response.Data;
}
public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient(_baseUrl);
var response = client.Execute<T>(request);
return response.Data;
}