Restful api, чтобы получить массив из запроса - PullRequest
0 голосов
/ 12 октября 2018

Мне было поручено создать API, который в качестве запроса возьмет номер продукта, который будет иметь количество и размер, почтовый индекс, способ доставки.

У клиента есть корзина, и в немcart - это номер продукта, количество и размер, поэтому в основном он отправляет запрос json, который выглядит следующим образом:

{
  "ShoppingCart": {
    "Products": [
      {
        "Sku": "123",
        "Size": "S",
        "Quantity": "1"
      },
      {
        "Sku": "456",
        "Size": "M",
        "Quantity": "2"
      },
      {
        "Sku": "789",
        "Size": "L",
        "Quantity": "3"
      }
    ],
    "ShipToZip": "54452",
    "ShipMethod": "Ground"
  }

}

, возможно ли получить запрос HTTP json на моем .net core rest webapi, который я делаю.

Если это так, как будет выглядеть маршрут для отправки json таким образом?Это будет довольно долго, если они должны поместить весь JSON в URL, верно?

РЕДАКТИРОВАТЬ: После проведения дополнительных исследований, я обнаружил, что я могу получить запрос POST с JSON в теле, оттудаЯ должен быть в состоянии прочитать этот JSON, сделать что-то с этим, а затем вернуть JSON обратно, верно?Я прав?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Полагаю, я не выглядел достаточно усердно: (

В любом случае, чем больше у меня возникнет вопросов, тем больше будет проблем с новичками.

Как получить json в ASP.NET web api?

Я получил оттуда свое решение,

Все, что мне нужно было сделать, это создать класс «Model», подобный приведенному ниже, который точно соответствует отправляемому формату JSON,десериализация не требуется

public class RequestModel
{
    public ShoppingCart RequestShoppingCart { get; set; }
}
public class ShoppingCart
{
    public Products[] Products { get; set; }
    public int ShipToZip { get; set; }
    public string ShipMethod { get; set; }
}
public class Products
{
    public string Sku { get; set; }
    public string Size { get; set; }
    public int Quantity { get; set; }

}

Затем оттуда в моем контроллере API я могу сделать следующее, чтобы увидеть, как он работает

[Produces("application/json")]
[Route("api/ShippingCalculator")]
public class ShippingCalculatorController : Controller
{
    // POST: api/ShippingCalculator
    [HttpPost]
    public string Post([FromBody]RequestModel jsonRequest)
    {
        // Debug.WriteLine(jsonRequest.RequestShoppingCart.Products);
        return jsonRequest.RequestShoppingCart.ShipMethod;
    }

}
0 голосов
/ 12 октября 2018

Проведя дополнительные исследования, я обнаружил, что могу получить запрос POST с JSON в теле, после чего я смогу прочитать этот json, сделать с ним что-нибудь и затем вернуть json обратно, верно?Я прав?

Да.Ты прав.Например, следующее действие контроллера примет тело запроса POST с JSON из вашего вопроса и ответит тем же JSON.

public class Product
{
    public string Sku { get; set; }
    public string Size { get; set; }
    public int Quantity { get; set; }
}

public class Cart
{
    public List<Product> Product { get; set; }
    public string ShipToZip { get; set; }
    public string ShipMethod { get; set; }
}

public class CartBody
{
    public Cart Cart { get; set; }
}

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    // POST api/values
    [HttpPost]
    public ActionResult<CartBody> Post(CartBody cartBody)
    {
        return cartBody;
    }
}
...