宁静的api从请求接收数组

时间:2018-10-12 01:22:04

标签: asp.net-core asp.net-core-webapi

我的任务是构建一个API,作为一个请求,它将使用一个产品编号,该产品编号将具有数量和大小,邮政编码,运输方式。

客户有一个购物车,在该购物车中是产品编号,数量和大小 所以基本上他会发送一个如下所示的json请求

myarray[x,y]

是否可以在我正在制作的.net核心rest webapi上接收HTTP json请求。

如果是这样,那么发送json这样的路由会是什么样?如果他们必须将整个json放在url中,那将会很长吗?

编辑: 经过更多研究后,我发现我可以在正文中接收到带有JSON的POST请求,从那里我应该能够读取该json,对其进行处理,然后再返回json吗?我说得对吗?

2 个答案:

答案 0 :(得分:1)

  

进行更多研究后,我发现我可以在体内收到带有JSON的POST请求,从那里我应该能够读取该json,对其进行一些处理,然后再将json返回正确吗?我说得对吗?

是的。你是对的。例如,以下控制器动作将接受来自您问题的JSON的POST正文,并以相同的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;
    }
}

答案 1 :(得分:1)

我想我看起来不够努力:(

无论如何,我觉得问题越多,就会遇到一些新手问题。

How to receive json in 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;
    }

}