I have a very simple method in ASP.NET Core 2.2 WebAPI:
[HttpPut]
public async Task<IActionResult> Put([FromForm] SimpleRequest request, [FromForm] string param1)
{
if (request.ExtraData == null) return BadRequest("Please send data");
await Task.CompletedTask;
return Ok("Works");
}
My model looks like this:
public class SimpleRequest
{
[Required]
public string UserId { get; set; }
public RequestType? RequestType { get; set; }
public DateTime Timestamp { get; set; }
public bool Test { get; set; }
public ExtraData ExtraData { get; set; }
}
public enum RequestType
{
Simple,
Complex,
}
public class ExtraData
{
public string FirstName { get; set; }
public string LastName { get; set; }
public ulong Id { get; set; }
public DateTime RDate { get; set; }
public uint Nr { get; set; }
}
When I do request from Postman my model is binding correctly:
Now I try to create the same using RestSharp. When I use below code it works fine:
var client = new RestClient("https://localhost:44325/api/values");
var request = new RestRequest(Method.PUT);
request.AddParameter("UserId", "Sample", ParameterType.GetOrPost);
request.AddParameter("RequestType", "Simple", ParameterType.GetOrPost);
request.AddParameter("Timestamp", DateTime.Now, ParameterType.GetOrPost);
request.AddParameter("Test", true, ParameterType.GetOrPost);
request.AddParameter("ExtraData.FirstName", "John", ParameterType.GetOrPost);
request.AddParameter("ExtraData.LastName", "Smith", ParameterType.GetOrPost);
request.AddParameter("ExtraData.Id", 1234, ParameterType.GetOrPost);
request.AddParameter("ExtraData.Nr", 1, ParameterType.GetOrPost);
request.AddParameter("ExtraData.RDate", DateTime.Now.AddDays(-2), ParameterType.GetOrPost);
request.AddParameter("param1", "YES", ParameterType.GetOrPost);
var response = client.Execute(request);
But I want to reuse my models because they are shared in separate DLL.
I create my model like so:
var model = new SimpleRequest
{
UserId = "Sample",
RequestType = RequestType.Simple,
Timestamp = DateTime.Now,
Test = true,
ExtraData = new ExtraData
{
FirstName = "John",
LastName = "Smith",
Id = 1234,
Nr = 1,
RDate = DateTime.Now.AddDays(-2)
}
};
but I'm unable to pass this model via request so that it can be correctly deserialized to my object.
I've tried using request.AddJsonBody
but this fails.
What is the correct way to pass model like above via RestSharp? How should I serialize it (or add as a param) to get this working.