Передача сериализованного объекта DTO в запросе Get не является правильным способом реализации API. Запрос на получение должен иметь параметры, а не объект сериализации. Если вы хотите сделать это и должны отправить объект, то почему бы не использовать почтовый запрос.
Пример реализации для API отдыха может быть следующим:
Через GET
[Route("{rowCount}/{startIndex}"), HttpGet]
public IHttpActionResult Get(int rowCount, int startIndex)
{
//Your logic Implementation
}
вызов будет как
www.xyz.com/controllerName/100/101
Это остальная реализация запроса
По почте
[Route(""), HttpPost]
public IHttpActionResult Post([FromBody]YourDTOClass obj)
{
//Your logic Implementation
}
Например, у вас есть класс DTO
//In C# the class name should be capital
private class ListInfo
{
//In c# the property name should be Capital
public int RowCount {get; set;} = 100;
public int StartIndex {get; set;}= 101;
}
Таким образом, ваш метод Post будет выглядеть как
//Route attribute is for configuring the custom route
//It is a feature in MVC 5
//FromBody attribute will search for data in the request body
[Route(""), HttpPost]
public IHttpActionResult Post([FromBody]ListInfo info)
{
//Your logic Implementation
}
Если вы также используете C # для вызова API, то вы можете использовать HttpClient
для передачи данных json-объекта вашего класса.
Отредактировано: Поскольку вы используете сторонний API, вам необходимо исправить вызов.
using (var client = new HttpClient())
{
//Setting the base address of the server
client.BaseAddress = new Uri("https://sdpondemand.manageengine.com");
//creating an anonymous object
var jsonObject = new {
input_data = new {
row_count = 100,
start_index = 101
}
};
//Converting into the content string
var content = new StringContent(JsonConvert.SerializeObject(jsonObject), Encoding.UTF8, "application/json");
//waiting for the post request to complete
var result = await client.PostAsync("app/itdesk/api/v3/requests", content);
//reading the response string
string resultContent = await result.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
//Deserialize your string into custom object here
var obj = JsonConvert.DeserializeObject<YourDTO>(resultContent);
}
else
{
//Todo: Log the Exception here
throw new Exception(contentString);
}
}