Для вашего текущего кода вы неправильно поняли JsonPatchDocument
, который используется для точного описания того, как вы хотите изменить документ (например, заменить значение в поле другим значением) без необходимости также отправлять вместе с остальныминеизменные значения.
В данный момент вы передаете prepareFormModel
вместо описания того, как вы хотите изменить formModel
.
Если вы хотите получить TestModel
непосредственно в UpdateModel
, вам необходимо удалить JsonPatchDocument
.
public async Task<IActionResult> UpdateModelWithOutJsonPatch(Guid id, [FromBody]TestModel modelDocument)
{
return Ok();
}
Если вы хотите реализовать JsonPatchDocument
, который описан в Патч JSON С ASP.net Core , вам нужно передать описание документа, для библиотеки путей json, вы можетепопробуйте fast-json-patch
.
API
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
вам потребуется реализовать что-то вроде ниже, чтобы получить TestModel
[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;
}
}