Skip to main content
 首页 » 编程设计

c#之使用 ServiceStack web 服务批量更新

2024年01月24日26zhenyulu

如果我们有多个更改的属性,您将如何通过 REST 服务实现批量更新?

假设我们有一位管理员在他的软件中管理 100 台客户端计算机。有些电脑改变了它们的位置,有些电脑被删除了。其他的有一个新的描述,等等。所以它不仅仅是 set location = 1 for ids {1,5,8}。

是否有必要为每种更改类型进行多次服务调用,或者是否有可能我现在没有看到?

更新:
它不仅仅是将一条或多条记录更新为给定值,而是不同更新场景的组合。

  • 更新 具有ids [1,5,8] 的计算机到locationId=4
  • 删除 ids [7,9]
  • 的计算机
  • 创建 具有 id [10] 和 locationId=7
  • 的新计算机

如果客户端程序管理一堆记录(这里是计算机)并点击“保存”,这种情况并不少见。

请您参考如下方法:

我会这样做:

[Route("/computer/{ComputerId}", "POST")] 
public class UpdateComputerRequest : IReturnVoid 
{ 
    public int LocationId { get; set; } 
    public int ComputerId { get; set; } 
} 
 
[Route("/computer/{ComputerId}", "DELETE")] 
public class DeleteComputerRequest : IReturnVoid 
{ 
    public int ComputerId { get; set; } 
} 
 
[Route("/computers", "POST")] 
public class BatchRequest : IReturnVoid 
{ 
    public List<UpdateComputerRequest> UpdateRequests { get; set; } 
    public List<DeleteComputerRequest> DeleteRequests { get; set; } 
} 
 
public class ComputerLocationService : Service 
{ 
    public void Post(UpdateComputerRequest request) 
    { 
        PostImpl(request); 
    } 
 
    public void Post(DeleteComputerRequest request) 
    { 
        DeleteImpl(request); 
    } 
 
    public void Post(BatchRequest request) 
    { 
        request.UpdateRequests.ForEach(PostImpl); 
        request.DeleteRequests.ForEach(DeleteImpl); 
    } 
 
    private void PostImpl(UpdateComputerRequest request) 
    { 
        // do stuff... 
    } 
 
    private void DeleteImpl(DeleteComputerRequest deleteComputerRequest) 
    { 
        // delete 
    } 
} 

没有创建,但应该清楚如何创建...