JsonPatchDocument
它用于准确描述如何修改文档(例如,用另一个值替换字段中的值),而不必同时发送其余未更改的值。
您当前正在通过
prepareFormModel
而不是描述如何修改
formModel
TestModel
直接在
UpdateModel
,您需要删除
public async Task<IActionResult> UpdateModelWithOutJsonPatch(Guid id, [FromBody]TestModel modelDocument)
{
return Ok();
}
如果你想实施
这在
JSON Patch With ASP.net Core
fast-json-patch
.
-
美国石油学会
public async Task<IActionResult> UpdateModelWithJsonPatch(Guid id, [FromBody]JsonPatchDocument<TestModel> modelDocument)
{
return Ok();
}
-
安装软件包
npm install fast-json-patch --save
-
导入函数
import { compare } from 'fast-json-patch';
-
比较对象并传递eh jsonpatch对象。
export class FetchDataComponent {
public forecasts: WeatherForecast[];
constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
const patch = compare(this.previousFormModel(), this.prepareFormModel());
http.patch<any>(baseUrl + 'api/SampleData/UpdateModelWithJsonPatch/1', patch).subscribe(result => {
console.log(result);
}, error => console.error(error));;
http.patch<any>(baseUrl + 'api/SampleData/UpdateModelWithOutJsonPatch/1', this.prepareFormModel()).subscribe(result => {
console.log(result);
}, error => console.error(error));;
}
previousFormModel() {
//const formModel = this.testForm.value;
const retVal: any = {
title: "t2" as string,
comment: "c2" as string,
qualified: false as boolean
};
return retVal;
}
prepareFormModel() { //const formModel = this.testForm.value;
const retVal: any = {
title: "t1" as string,
comment: "c1" as string,
qualified: true as boolean
};
return retVal;
}
}
JsonPatch
,您将需要实现以下内容才能获得
[Route("api/[controller]")]
public class PersonController : Controller
{
private readonly Person _defaultPerson = new Person
{
FirstName = "Jim",
LastName = "Smith"
};
[HttpPatch("update")]
public Person Patch([FromBody]JsonPatchDocument<Person> personPatch)
{
personPatch.ApplyTo(_defaultPerson);
return _defaultPerson;
}
}