POST using AddBody()

231 views
Skip to first unread message

jcpowermac

unread,
Aug 23, 2011, 9:24:36 AM8/23/11
to RestSharp
Hello,

I am new to RestSharp and having an issue. I am able to deserialize
but when I try to send a firewall configuration back the Content
variable is "" and the ErrorMessage is "Root element is missing". Any
help would be appreciated.

Thanks,
Joe

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Newtonsoft.Json;
using RestSharp;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using vshieldedge;

namespace vshield
{
class Program
{

static void Main(string[] args)
{
VShieldEdgeConfig vsec = new
vshieldedge.VShieldEdgeConfig();
FirewallConfig fwconf = new FirewallConfig();
FirewallRule fwrule = new FirewallRule();

vshieldedge.PortInfo dpi = new PortInfo();
vshieldedge.PortInfo spi = new PortInfo();
IpInfo dip = new IpInfo();
IpInfo sip = new IpInfo();

dpi.port = "445";
dip.ipAddress = "10.53.2.123";
spi.port = "any";
sip.ipAddress = "*";

fwrule.action = "allow";
fwrule.destinationIpAddress = dip;
fwrule.destinationPort = dpi;
fwrule.direction = "both";
fwrule.protocol = "tcp";
fwrule.ruleId = 0;
fwrule.sourceIpAddress = sip;
fwrule.sourcePort = spi;

fwconf.Add(fwrule);
vsec.FirewallConfig = fwconf;


var client = new RestClient();
client.BaseUrl = "https://10.53.2.103/";
client.Authenticator = new HttpBasicAuthenticator("admin",
"default");
var request = new RestRequest(Method.GET);
request.Resource = "api/1.0/network/dvportgroup-2735/
firewall/rules";
var rr_fwrule =
client.Execute<VShieldEdgeConfig>(request);
Console.WriteLine(rr_fwrule.Content);
//Console.ReadLine();


var request2 = new RestRequest(Method.POST);
request2.Resource = "api/1.0/network/dvportgroup-2735/
firewall/rules";
request2.AddBody(vsec);
XmlSerializer xmlSerial = new
XmlSerializer(typeof(VShieldEdgeConfig));
xmlSerial.Serialize(Console.Out, vsec);
var rr = client.Execute<VShieldEdgeConfig>(request2);
Console.ReadLine();
}
}
}

namespace vshieldedge
{
[System.Xml.Serialization.XmlRootAttribute(Namespace = "",
IsNullable = false)]
public class VShieldEdgeConfig
{
public FirewallConfig FirewallConfig { get; set; }
}

public class FirewallConfig : List<FirewallRule> { }

public class FirewallRule
{
public String protocol { get; set; }
public IpInfo sourceIpAddress { get; set; }
public PortInfo sourcePort { get; set; }
public IpInfo destinationIpAddress { get; set; }
public PortInfo destinationPort { get; set; }
public String direction { get; set; }
public String action { get; set; }
public Boolean log { get; set; }
public UInt32 ruleId { get; set; }

}
public class IpInfo
{
public String ipAddress { get; set; }
public IpRange ipRange { get; set; }
}
public class IpRange
{
public String rangeStart { get; set; }
public String rangeEnd { get; set; }
}
public class PortInfo
{
public String port { get; set; }
public PortRange portRange { get; set; }
}
public class PortRange
{
public String rangeStart { get; set; }
public String rangeEnd { get; set; }
}
}

Andrew Young

unread,
Aug 25, 2011, 1:14:05 AM8/25/11
to rest...@googlegroups.com
It really depends on what is being returned back on your POST request. Can you check to make sure that the raw response for request is what you're expecting?

Andrew Young

unread,
Aug 25, 2011, 1:16:16 AM8/25/11
to rest...@googlegroups.com
It looks like its choking on the response on your POST request.
Reply all
Reply to author
Forward
0 new messages