Тело Json для функций веб-сервиса с несколькими параметрами

#json #asp.net-web-api

#json #asp.net-web-api

Вопрос:

Я пытаюсь выполнить post-запрос, который завершается неудачей всякий раз, когда я добавляю второй параметр в функцию.

Это, например, работает со следующей функцией:

 public class Mock
{
     public String MyFirstValue { get; set; }
     public String MySecondValue { get; set; }
}

[HttpPost]
public ResponseDataDTO TestPost(Mock test)
{
     var response = new ResponseDataDTO();
     return response;
}
  

Со следующим запросом тела:

 { 
   "MyFirstValue": "testvalue", 
   "MySecondValue": "testvalue" }
}
  

Однако, когда я добавляю другой параметр в эту функцию, он больше не работает, потому что я не совсем уверен в том, как создать json:

 [HttpPost]
public ResponseDataDTO TestPost(Mock test, Mock test2)
{
      var response = new ResponseDataDTO();
      return response;
}
  

Мое лучшее предположение о теле:

 { 
   "test": {
               "MyFirstValue": "testvalue", 
               "MySecondValue": "testvalue"
   }
   "test2": {
               "MyFirstValue": "testvalue2", 
               "MySecondValue": "testvalue2"
   }
}
  

Раньше у меня не было таких проблем, потому что у меня обычно есть только один параметр объекта, который принимает все.

Еще одна странная вещь, с которой я не могу работать, — это метод только с целочисленным параметром:

 [HttpPost]
public ResponseDataDTO TestPostInteger(int test)
{
      var response = new ResponseDataDTO();
      return response;
}
  

С телом:

 { 
   "test" : 1
}
  

Это дает мне 404, он даже не найдет метод. Если вместо этого я помещаю параметр в URL, он работает.

Ответ №1:

Тело ответа может привязываться только к одному объекту.

Сказав это, одним из решений было бы TestPost использовать массив Mock . Вот так:

  [HttpPost]
 public ResponseDataDTO TestPost(Mock[] tests)
 { ... }
  

Json:

 [
   {
       "MyFirstValue": "testvalue", 
       "MySecondValue": "testvalue"
   },
   {
       "MyFirstValue": "testvalue2", 
       "MySecondValue": "testvalue2"
   }
]
  

Комментарии:

1. Спасибо, я не знал, что он может привязываться только к одному объекту.