如何在 web api 中发布多个 json 对象?

Posted

技术标签:

【中文标题】如何在 web api 中发布多个 json 对象?【英文标题】:How can I post multiple json objects in web api? 【发布时间】:2015-07-09 16:48:50 【问题描述】:

我有一个接受单个 Json 对象 Post 的 web-api 控制器(目前使用 Postman 作为我的用户代理)。

这是我的 Post 方法:

    private AH_ODS_DB_Entities db = new AH_ODS_DB_Entities();    
    [ResponseType(typeof(Sales))]
            public HttpResponseMessage PostSales(Sales Sales, [FromUri] string auth)
            
                try
                
                    if (ModelState.IsValid)
                    
                        if (auth == "KDI")
                        
                            Int64 rs = db.Sales_.Where(sl => sl.Serial == Sales.Serial).Count();
                            if (1 == rs)
                            
                                return Request.CreateErrorResponse(HttpStatusCode.Conflict, " Duplicate Found!");
                            
                            else
                            
                                db.Sales_.Add(Sales);
                                db.SaveChanges();
                                return Request.CreateErrorResponse(HttpStatusCode.OK, "Added!");
                            
                        
                        else
                        
                            return Request.CreateResponse(HttpStatusCode.Unauthorized, "Unauthorized Access!");
                        
                    
                    else
                    


  return Request.CreateResponse(HttpStatusCode.InternalServerError, "Something's wrong with the JSON model you sent me.");
                
            
            catch (Exception ex)
            
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
            

        

这是 Json:


  "ExtSerial": "AH0000002",
  "Date": "2015-03-01",
  "CustomerRefNbr": "JPM0001",
  "Description": "2015 FEBRUARY RENTAL  2015 FEBRUARY RENTAL",
  "Customer": "TRDE0065",
  "Amount": 17989.51,
  "AQ_Branch": "KDI",
  "AQ_COA": "4100503000",
  "LineSubAccount": "OPMOPN000",
  "LineTaxCategory": "JPMTAX",
  "LineQuantity": 1,
  "LineUnitPrice": 400000,
  "AQ_PostStatus": 1,
  "AQ_StatusDate": "2015-03-01",
  "DTS": "2015-03-01"

它工作正常,但我想让我的 post 方法有选择地接受多个 Json 数据数组

类似这样的:

["Id1":3,"Id2":76,"Id3":19,"Id1":56,"Id2":87,"Id3":94,"Id1":976,"Id2":345,"Id3":7554]

我尝试将我的销售模型参数作为列表,但它无法读取我的销售实体 db.Sales_.Add(Sales);,并且无法在 Int64 rs = db.Sales_.Where(sl => sl.Serial == Sales.Serial).Count(); 的销售实体中获取表序列

顺便说一句,我正在使用 EF6 和 LINQ。我真的需要你的帮助,我知道这是一个简单的问题,但我真的卡住了。

【问题讨论】:

【参考方案1】:

您不能在 Web API POST 操作中接收多个 JSON 对象。那是因为它只能反序列化 POST 有效负载一次。

唯一的解决方案是发布(客户端)一个接收(网络操作参数)一个具有其他对象作为属性的对象。

您的问题不能很好理解,但是,我会尽力给您一个更具体的答案。你需要定义一个像这样的类作为你的 web api 参数:

public class SalesAndIds

    public Sales Sales  get; set; 
    public List<Ids> IdsList  get; set; 
    public class Ids
    
        public int Id1  get; set; 
        public int Id2  get; set; 
        public int Id3  get; set; 
    

您从 javascript 发布的对象必须如下所示:


   Sales:  /* the sales object*/ ,
   IdsList: [ /* the array with the ids list */  ]

【讨论】:

不,在 Postman 中您只能撰写请求。要对此进行测试,您需要创建一个 POST 请求(在下拉列表中将方法更改为 POST),然后手动编写 JSON 有效负载。为此,请选择“Raw”,然后选择“JSON”类型以获得编辑器帮助来编写 JSON 有效负载。不要忘记添加 AcceptContent-Type 标头,它们的值都是:application/json。有效负载应该看起来像我的答案中的第二个代码块,但使用值而不是 cmets 抱歉回复晚了。这被认为是多个对象吗? "Id1":3,"Id2":76,"Id3":19,"Id1":56,"Id2":87,"Id3":94,"Id1":976,"Id2" :345,"Id3":7554 我不能将它发布到我的网络 api 吗?【参考方案2】:

你可以试试下面的方法,在 JArray 中而不是字符串中接收帖子数据

public <return type> <method name>(string id, [FromBody] JArray value)
  
      if (value != null)
      
         string data = value.ToString();
      
  

【讨论】:

以上是关于如何在 web api 中发布多个 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 对象数组发布到 Web api

将多个对象从Angular控制器POST到Web API 2

如何使用 MVC Web Api GET 将对象作为参数传递

如何在 ASP.NET Core Web API 中发布对象列表

如何使用JSON正文在REST API POST方法中传递多个记录

如何在 ASP.NET Web API 中为 Json.NET 设置自定义 JsonSerializerSettings?