Я пытаюсь сделать очень простой вызов 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
}
Я что-то упустил?
AddObject(new { A = "foo", B = "bar" })
чтобы свойства объекта преобразовывались в параметрыrequest.AddParameter("text/json", body, ParameterType.RequestBody);
request.AddBody(new ...
вашем первом примере есть одна устаревшая скобка .В текущей версии RestSharp (105.2.3.0) вы можете добавить объект JSON в тело запроса с помощью:
request.AddJsonBody(new { A = "foo", B = "bar" });
Этот метод устанавливает тип содержимого как application / json и сериализует объект в строку JSON.
источник
var client = new RestSharp.RestClient("http://your.api.com"); var request = new RestSharp.RestRequest("do-something", Method.POST); var body = new {details = new {extras = "stuff"}}; request.AddJsonBody(body); var response = client.Execute(request);
Это то, что сработало для меня, в моем случае это был пост для запроса на вход:
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
тело:
{ "userId":"sam@company.com" , "password":"welcome" }
источник
Надеюсь, это кому-то поможет. Это сработало для меня -
RestClient client = new RestClient("http://www.example.com/"); RestRequest request = new RestRequest("login", Method.POST); request.AddHeader("Accept", "application/json"); var body = new { Host = "host_environment", Username = "UserID", Password = "Password" }; request.AddJsonBody(body); var response = client.Execute(request).Content;
источник
request.AddHeader("Accept", "application/json");
это правильный ответ.Если у вас есть
List
объекты, вы можете сериализовать их в JSON следующим образом:List<MyObjectClass> listOfObjects = new List<MyObjectClass>();
А затем используйте
addParameter
:requestREST.AddParameter("myAssocKey", JsonConvert.SerializeObject(listOfObjects));
И вам нужно будет установить формат запроса
JSON
:источник
Вот полный код рабочего приложения консоли. Пожалуйста, установите пакет RestSharp.
using RestSharp; using System; namespace RESTSharpClient { class Program { static void Main(string[] args) { string url = "https://abc.example.com/"; string jsonString = "{" + "\"auth\": {" + "\"type\" : \"basic\"," + "\"password\": \"@P&p@y_10364\"," + "\"username\": \"prop_apiuser\"" + "}," + "\"requestId\" : 15," + "\"method\": {" + "\"name\": \"getProperties\"," + "\"params\": {" + "\"showAllStatus\" : \"0\"" + "}" + "}" + "}"; IRestClient client = new RestClient(url); IRestRequest request = new RestRequest("api/properties", Method.POST, DataFormat.Json); request.AddHeader("Content-Type", "application/json; CHARSET=UTF-8"); request.AddJsonBody(jsonString); var response = client.Execute(request); Console.WriteLine(response.Content); //TODO: do what you want to do with response. } } }
источник