Search code examples
c#pythonrestsharp

python to c# (about server request)


I need to translate this python code into C#:

messages = { "to" :"PhoneNumber" }
body = {
    "type" : "SMS",
    "contentType" : "COMM",
    "from" : "PhoneNumber2",
    "subject" :"subject",
    "content" : "Hell world",
    "messages" : [messages]
}
body2 = json.dumps(body)
headers = {
    'Content-Type': 'application/json; charset=utf-8',
    'X-ncp-apigw-timestamp': timestamp,
    'x-ncp-iam-access-key': access_key,
    'x-ncp-apigw-signature-v2': make_signature(uri, access_key)
    }

res = requests.post(apiUrl, headers=headers, data=body2)

res.request
res.status_code
res.raise_for_status()

print(res.json())

So I've tried :

    public class themessage
    {
        public string to;
    }
    public class body
    {
        public string type;
        public string contentType;
        public string from;
        public string subject;
        public string content;
        public themessage messages;
    }


            var obj = new body
            {
                type = "SMS",
                contentType = "COMM",
                from = "PN",
                subject = "subject",
                content = "Hell World",
                messages = new themessage
                {
                    to = "PN"
                }
            };


            var client = new RestClient(apiUrl);
            var request = new RestRequest(Method.POST);
            request.AddHeader("Content-Type", "application/json; charset=utf-8");
            request.AddHeader("X-ncp-apigw-timestamp", timestamp);
            request.AddHeader("x-ncp-iam-access-key", accessKey);
            request.AddHeader("x-ncp-apigw-signature-v2", test);
            request.AddJsonBody(obj); // **this is where I'm concerning part**
            IRestResponse response = client.Execute(request);

But, as you expected, failed to post with error message of "Not requested format" something.

Did I something wrong when making JsonBody? or posting process?

Thanks for all answers in advance!


Solution

  • Following my last comment on the IRestRequest interface, your class hierarchy should look similar to

    public class themessage
    {
        public string to;
    }
    
    public class body
    {
        public string type;
        public string contentType;
        public string from;
        public string subject;
        public string content;
        public themessage[] messages; // <- Array here
    }
    

    and the object you create with it will be something like

    var obj = new body
    {
        type = "SMS",
        contentType = "COMM",
        from = "PN",
        subject = "subject",
        content = "Hell World",
        messages = new themessage[] { new themessage{to = "PN"} }
    };
    

    The code for the RestClient and RestRquest stays as it is.