kumarravishankar Ответов: 1

Невозможно передать объект json в web api


Когда я запрашиваю у почтальона строку json он работает нормально
Ex -когда я передаю siple 1, он работает, но когда я посылаю это как {"id":"1"}, я не получаю результата

Что я уже пробовал:

namespace DemoApi.Controllers
{
    public class EmployeeController : ApiController
    {       
        IList employees = new List() 
        {
           new Employee()  
                {  
                    EmployeeId = 1, EmployeeName = "Mukesh Kumar", Address = "New Delhi", Department = "IT"  
                },  
                new Employee()  
                {  
                    EmployeeId = 2, EmployeeName = "Banky Chamber", Address = "London", Department = "HR"  
                },  
                new Employee()  
                {  
                    EmployeeId = 3, EmployeeName = "Rahul Rathor", Address = "Laxmi Nagar", Department = "IT"  
                },  
                new Employee()  
                {  
                    EmployeeId = 4, EmployeeName = "YaduVeer Singh", Address = "Goa", Department = "Sales"  
                },  
                new Employee()  
                {  
                    EmployeeId = 5, EmployeeName = "Manish Sharma", Address = "New Delhi", Department = "HR"  
                },  
        };

        public IList GetAllEmployees()
        {
            //Return list of all employees  
            return employees;
        }       

        [HttpPost]       
        public Employee GetData([FromBody] int id)
        {
            var employee = employees.FirstOrDefault(e => e.EmployeeId == id);

            if (employee == null)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
            }
            return employee;
        }

    }
}

Richard Deeming

Попробуйте удалить его [FromBody] атрибут на вашем id параметр.

1 Ответов

Рейтинг:
0

José Amílcar Casimiro

Использование [FromBody]

Чтобы заставить Web API считывать простой тип из тела запроса, добавьте атрибут [FromBody] в параметр:

public HttpResponseMessage Post([FromBody] string name) { ... }
В этом примере Web API будет использовать форматер типа media для считывания значения name из тела запроса. Вот пример запроса клиента.

Почта http://localhost:5076/api/values HTTP/1.1
Агент Пользователя: Fiddler
Хост: localhost:5076
Content-Type: application/json
Содержание-Длина: 7
"Алиса"

Если параметр имеет значение [FromBody], Web API использует заголовок Content-Type для выбора средства форматирования. В этом примере тип контента - "application/json", а тело запроса-необработанная строка JSON (не объект JSON).

Из тела сообщения можно прочитать не более одного параметра. Так что это не сработает:

// Внимание: не будет работать!

public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }


Причина этого правила заключается в том, что тело запроса может храниться в небуферизованном потоке, который можно прочитать только один раз.

Подробнее читайте здесь: Привязка параметров в ASP.NET веб-API | The ASP.NET сайт[^]