ASP.NET Приложение MVC — как отправлять данные в теле СООБЩЕНИЯ

#c# #asp.net-mvc

Вопрос:

Я пробую свои силы в ASP.NET. На данный момент я просто пытаюсь доказать себе, что могу получить массив json.

У меня есть следующий код:

     [Route("widgets")]
    [HttpPost]
    [AllowAnonymous]
    public string createbulkwidgets([FromBody] string request)
    {
        return request;
    }
 

Я использую ПОЧТАЛЬОНА, чтобы отправить следующее:

СООБЩЕНИЕ на http://localhost:5000/widgets

и я определил тело — raw — json, которое включает в себя это:

 {
 "cars": [
    { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
    { "name":"BMW", "models":[ "320", "X3", "X5" ] },
    { "name":"Fiat", "models":[ "500", "Panda" ] }
  ]
}
 

Проблема

Когда я пытаюсь запустить свой код, строка запроса всегда равна НУЛЮ.

Я не уверен, что делаю что-то не так.

Однако ошибок компиляции / сборки нет.

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

1. Эй, @dot — Я немного смущен тем, что здесь происходит. Итак, я думаю, что FromBody просто привязывает параметр/свойство к телу запроса. В вашем методе api, указанном выше, если запрос не равен нулю при передаче из вызывающего метода, ваш запрос на возврат не будет равен нулю. Можете ли вы установить точку останова сразу после открытой скобки метода api, а затем навести курсор мыши на парметр запроса — «общедоступная строка createbulkwidgets([FromBody] строковый запрос)»? Если это значение равно нулю, то проблема в вашем вызывающем методе (скорее всего, в вашем веб-контроллере). Отображается ли json, запрос или ответ?

2. Да, он равен нулю, когда я навожу курсор на подпись функции/ метода. Мне придется покопаться, чтобы посмотреть, от чего я унаследовал этот базовый контроллер. Я использую существующую структуру, если хотите. Просто недостаточно знаком с asp.net чтобы знать, что мне следует искать.

3. Можете ли вы показать контроллер, вызывающий этот метод api? В нем вы должны создать строковый запрос, который передается методу, показанному выше. Хао Го считает, что вам следует немного перестроить свой поток. Я предпочитаю создавать модель представления с объектами, названными точно так, как они отображаются в json (имя, модели), потому что это облегчит жизнь при преобразовании результата json.

Ответ №1:

Попробуйте это:

 public class CarsItem
{
    public string Name { get; set; }
    public List<string> Models { get; set; }
}

public class Root
{
    public List<CarsItem> Cars { get; set; }
}

[Route("widgets")]
[HttpPost]
[AllowAnonymous]
public Root CreateBulkWidgets([FromBody] Root request)
{
    return request;
}
 

Вы получили пустую строку запроса, потому что ASP.NET преобразует JSON в экземпляр в соответствии с форматом JSON, поэтому вам следует определить модель для его получения

https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api

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

1. поэтому я добавил модель, чтобы определить ее. Но когда я получаю данные… я вижу, что список все еще пуст.