Search code examples
asp.netasp.net-mvcrestsharprestful-architecture

Posting T with RestSharp to MVC4 api server gives null object


I have this common CUser class

public class CUser
{
    public String Username { get; set; }
    public String Password { get; set; }
}

Then I have this code on my client that uses RestSharp

    public void CreateUser()
    {
        RestRequest request = new RestRequest(Method.POST);
        request.RequestFormat = DataFormat.Json;
        request.Resource = "user/{cUser}";

        CUser user = new CUser
        {
            Username = "Foo",
            Password = "BarBaz"
        };

        request.AddParameter("cUser", user, ParameterType.UrlSegment);

        client.PostAsync<int>(request, (response, handler) =>
            {
                System.Diagnostics.Debug.WriteLine(response.StatusDescription);
                System.Diagnostics.Debug.WriteLine("id: " + response.Data);
            });
    }

And this http route in my global.asax

            routes.MapHttpRoute(
            name: "CreateUser",
            routeTemplate: "api/{controller}/{cUser}",
            defaults: new
                          {
                              controller = "User",
                              action = "CreateUser",
                              cUser = RouteParameter.Optional
                          });

And this servercode to handle it

    public int CreateUser(CUser cUser)
    {
        User user = new User(cUser);
        LoginManager manager = new LoginManager();
        return manager.CreateUser(user);
    }

But everytime I run it cUser's values are null (Username and Password) so do I need to do something to restsharp to make it serialize it properly?


Solution

  • I think this is what you want:

    request.AddParameter("username", user.Username);
    request.AddParameter("password", user.Password);
    

    What you're doing would result in cUser.ToString() being substituted for the {cUser} placeholder.