Разноска параметров RestSharp JSON
Я пытаюсь сделать очень простой вызов REST для моего API MVC 3, и параметры, которые я передаю, не привязаны к методу действия.
клиент
var request = new RestRequest(Method.POST);
request.Resource = "Api/Score";
request.RequestFormat = DataFormat.Json;
request.AddBody(request.JsonSerializer.Serialize(new { A = "foo", B = "bar" }));
RestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
сервер
public class ScoreInputModel
{
public string A { get; set; }
public string B { get; set; }
}
// Api/Score
public JsonResult Score(ScoreInputModel input)
{
// input.A and input.B are empty when called with RestSharp
}
Я что-то пропустил?
4 ответа:
вам не нужно сериализовать тело самостоятельно. Просто сделай
request.RequestFormat = DataFormat.Json; request.AddBody(new { A = "foo", B = "bar" }); // uses JsonSerializer
Если вы просто хотите POST params вместо этого (который все равно будет сопоставляться с вашей моделью и намного эффективнее, так как нет сериализации в JSON), сделайте это:
request.AddParameter("A", "foo"); request.AddParameter("B", "bar");
это то, что сработало для меня, для моего случая это был пост для запроса на вход:
var client = new RestClient("http://www.example.com/1/2"); var request = new RestRequest(); request.Method = Method.POST; request.AddHeader("Accept", "application/json"); request.Parameters.Clear(); request.AddParameter("application/json", body , ParameterType.RequestBody); var response = client.Execute(request); var content = response.Content; // raw content as string
body:
{ "userId":"sam@company.com" , "password":"welcome" }
в текущей версии RestSharp (105.2.3.0) вы можете добавить объект JSON в тело запроса с помощью:
request.AddJsonBody(new { A = "foo", B = "bar" });
этот метод задает тип контента application / json и сериализует объект в строку JSON.
если у вас
List
объектов, вы можете сериализовать их в JSON следующим образом:List<MyObjectClass> listOfObjects = new List<MyObjectClass>();
и затем использовать
addParameter
:requestREST.AddParameter("myAssocKey", JsonConvert.SerializeObject(listOfObjects));
и вам нужно будет установить формат запроса в
JSON
:requestREST.RequestFormat = DataFormat.Json;