Rest 在Web API中使用Post而不是Get来获取数据是否正确

Rest 在Web API中使用Post而不是Get来获取数据是否正确,rest,asp.net-web-api,Rest,Asp.net Web Api,我目前正在通过ASP.NETWebAPI技术创建RESTfulAPI。我有两个关于WebAPI的问题 我做了以下工作: 在控制器类中创建了以下方法: 公共HttpResponseMessage PostOrderData(OrderParam OrderInfo) 根据参数OrderInfo,查询SQL Server并获取订单列表 设置集合对象的响应内容: List ordList=newlist(); //从SQL查询结果填充ordList var response=Request.Crea

我目前正在通过ASP.NETWebAPI技术创建RESTfulAPI。我有两个关于WebAPI的问题

我做了以下工作:

  • 在控制器类中创建了以下方法:

    公共HttpResponseMessage PostOrderData(OrderParam OrderInfo)

  • 根据参数OrderInfo,查询SQL Server并获取订单列表
  • 设置集合对象的响应内容:
  • List ordList=newlist();
    //从SQL查询结果填充ordList
    var response=Request.CreateResponse(HttpStatusCode.OK,ordList);
    
  • 在客户端
  • orderpram orderpram=neworderpram();
    response=client.PostAsJsonAsync(“api/order”,ordparam).Result;
    if(响应。IsSuccessStatusCode)
    {  
    List mydata=response.Content.ReadAsAsync().Result;
    }
    
    所以问题是:将数据发布到服务器以获取数据(即使用Post数据代替Get)是否正确?这种方法有缺点吗?(一个缺点是:我无法直接从浏览器中查询)我在这里使用了Post,因为参数“OrderParam”将来可能会扩展,并且可能会因为URL长度的增加而出现问题

    第二个问题是:我使用类作为参数和返回对象,即OrderParam和Orders。现在,这个web api的消费者(客户端)是不同的客户,他们将通过.Net(C#)或Jquery/JS使用api。那么,我们是否需要将包含OrderParam和Orders类定义的类文件手动传递给每个客户机?并且每次发送给客户的时候上面的类会有什么变化

    提前感谢
    沙阿

    通常不会

    POST既不安全也不幂等-因此无法缓存。它用于更改服务器状态的情况

    如果你有一个大的critieria,你需要重新设计,但在大多数情况下,URL片段或查询字符串参数可以工作。看看OData,它使用querystring进行非常复杂的查询,并使用GET


    关于第二个问题,也不是。服务器可以公开模式(类似于WSDL)或文档,但不应该知道客户机。

    是的,RESTFUL与安全无关,它只是一种约定,对于Web API,您可以使用它,因为您不需要对Web API进行任何缓存。

    说“POST不安全”,那意味着删除和放置是安全的吗?我认为这与安全无关,SSL/TSL正在处理安全问题。还有一件事,这个问题是关于WebAPI的,所以使用缓存不再是一个问题,我们不想使用浏览器缓存来实现WebAPI
    List<Orders> ordList = new List<Orders>();  
    //filled the ordList from SQL query result  
    var response = Request.CreateResponse<List<Orders>>(HttpStatusCode.OK, ordList);
    
    OrderParam ordparam = new OrderParam();  
    response = client.PostAsJsonAsync("api/order", ordparam).Result;  
    if (response.IsSuccessStatusCode)  
    {  
    List<Orders> mydata = response.Content.ReadAsAsync<List<Orders>>().Result;  
    }