我正在实现一个允许对象被PATCH
编辑的 REST 风格的 API。该PATCH
操作的目的是允许更新类中的一个或多个属性,而无需触及可能设置的其他属性。
这些是ServiceStack OrmLite页面上部分更新的示例 ,但似乎需要硬编码来指示哪些字段将被部分更新。在我的场景中,取决于应用程序来决定发送哪些字段。
我还必须应对对象可能尚未持久化的情况。
为了解决这个问题,我实施了以下内容:
public object Patch(Myclass request)
{
HttpStatusCode SuccessCode;
try
{
var result = (MyClass)Get(request);
if (result != null)
{
request.PopulateWithNonDefaultValues(result);
dbFactory.Run(dbCmd => dbCmd.UpdateNonDefaults(request, r => r.myId == request.myId));
}
else
{
dbFactory.Run(dbCmd => dbCmd.Save(request));
}
SuccessCode = HttpStatusCode.Accepted;
}
catch (Exception e)
{
log.Error(e);
SuccessCode = HttpStatusCode.InternalServerError;
}
return new HttpResult()
{
StatusCode = SuccessCode
};
}
它有效,但感觉有些不对劲,我确定一定有更好的方法吗?