使用 ASP.NET Web API 更新 API 请求架构或设计模式中的某些字段

问题描述 投票:0回答:3

我有一个 API 可以更新已经存在的实体。该实体可以通过 API 存在的界面手动更新。

我的问题是关于如何仅更新供应商可能通过实体上的 API 发送的某些字段的良好设计模式或架构是什么?我不想用 NULL 或空字符串覆盖字段,只是因为它们在发送到 API 时不知道这些值,但数据库中的实体可能已经有该字段的值。

如果供应商想要将字段重置为某种空字符串,还应该考虑到这一点。

实体API模型

ID
Name
TwitterHandle

具有值的实体数据库模型

ID = 200
Name = Hello
TwitterHandle = @hello

实体请求模型将值发送到 API

ID = 200
Name = Hello2

此请求应仅将名称更新为 Hello2,而保留 TwitterHandle。但是,在另一个请求中,如果发送了某些内容(NULL,空字符串),他们可以重置 TwitterHandle

.net post asp.net-web-api asp.net-web-api2
3个回答
1
投票

我们过去做过的一件事是创建一个端点“http://webapi.com/twitter/200/name”,然后执行包含更新值的 put。它并不完美,但它可以完成工作并且非常容易实现。


0
投票

如果您想在 API 级别执行此操作,则可以使用 HttpPatch,如下所示

public void Patch(Guid id, JsonPatchDocument<SomeDto> patch) {
    // Perform validation
    var objectToUpdate = repo.GetById(id); // replace this with your database call
    patch.ApplyUpdatesTo(objectToUpdate); 
    repo.Save(objectToUpdate); // save it to database
}

我会采取的另一种方法是使用 Automapper。我将创建 dto 对象和 automapper 映射类,它将 dto 转换为数据库模型。这样您也将遵循单一责任原则,因为您的映射将成为自动映射器配置的责任


0
投票

我想我找到了 Newtonsoft 的解决方案

JsonConvert.PopulateObject

填充对象

© www.soinside.com 2019 - 2024. All rights reserved.