2017-01-06 2 views
1

Pour ajouter un abonné à la liste MailChimp à l'aide de l'API 3.0, les paramètres e-mailadress et status sont requis. Si la requête réussit, la réponse contiendra l'identifiant au format json.Ajout d'un nouvel abonné à MailChimp renvoie Bad Request

Mon problème est que lorsque j'utilise ma classe membre pour ajouter un abonné, la requête envoie l'identifiant, qui est null, et donc je reçois l'erreur Bad Request. Comment puis-je modifier ma classe Membre pour lire uniquement l'identifiant de la réponse et ne pas l'ajouter dans la requête? J'utilise RestSharp, Visual Studio 2013, .Net 4.0,

Ma classe membre ressemble à ce

public class Member 
{    
    public Member(){} 
    public Member(string status) 
    { 
     this.status = status; 
    } 
    public Member(string email_address, string status) 
    { 
     this.status = status; 
     this.email_address = email_address; 
    } 
    public string id { get; set; } 
    public string email_address { get; set; } 
    public string status { get; set; } 
} 

Et ma fonction createMember ressemble à ceci:

static void createMember() 
{ 
    var client = new RestClient(); 
    client.BaseUrl = new Uri("https://" + dc + ".api.mailchimp.com/3.0"); 

    //HTML Basic Authentification 
    client.Authenticator = new HttpBasicAuthenticator(usernsme, apiKey); 

    var request = new RestRequest(Method.POST); 
    request.Resource = "lists/{list_id}/members"; 

    request.AddUrlSegment("list_id", listId); 

    request.RequestFormat = DataFormat.Json; 

    request.AddBody(new Member(memberEmail, "subscribed")); 

    RestClient.AddHandler(); 
    IRestResponse<Member> response2 = client.Execute<Member>(request); 
    string _id = response2.Data.id; 

    Console.WriteLine(response.StatusCode); 
    Console.WriteLine(_id); 
} 

je peux ajouter un Abonnez-vous à une liste si je supprime l'ID de la classe membre, mais comment puis obtenir l'ID de la réponse et travailler avec elle?

Répondre

1

Selon their reference, la méthode de l'API que vous appelez a différents paramètres du corps de demande et les paramètres du corps de réponse, alors je suggère d'utiliser deux classes différentes. La première serait MemberRequest, ce qui est de la demande et ne possède pas le domaine id

public class MemberRequest 
{ 
    public MemberRequest(){} 

    public MemberRequest(string status) 
    { 
     this.status = status; 
    } 

    public MemberRequest(string email_address, string status) 
    { 
     this.status = status; 
     this.email_address = email_address; 
    } 

    public string email_address { get; set; } 
    public string status { get; set; } 
} 

et le second serait MemberResponse, ce qui est de la réponse et a le champ id

public class MemberResponse 
{ 
    public string id { get; set; } 
    public string email_address { get; set; } 
    public string status { get; set; } 
} 

Voilà comment votre méthode createMember ressemblerait

static void createMember() 
{ 
    var client = new RestClient(); 
    client.BaseUrl = new Uri("https://" + dc + ".api.mailchimp.com/3.0"); 

    //HTML Basic Authentification 
    client.Authenticator = new HttpBasicAuthenticator(usernsme, apiKey); 

    var request = new RestRequest(Method.POST); 
    request.Resource = "lists/{list_id}/members"; 

    request.AddUrlSegment("list_id", listId); 

    request.RequestFormat = DataFormat.Json; 

    request.AddBody(new MemberRequest(memberEmail, "subscribed")); 

    IRestResponse<MemberResponse> response = client.Execute<MemberResponse>(request); 
    string _id = response.Data.id; 

    Console.WriteLine(response.StatusCode); 
    Console.WriteLine(_id); 
} 
+0

Merci beaucoup. C'était exactement ce que je cherchais. – ptrask