В настоящее время у меня есть веб-API, который реализует RESTFul API. Модель для моего API выглядит следующим образом:
public class Member
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Created { get; set; }
public DateTime BirthDate { get; set; }
public bool IsDeleted { get; set; }
}
Я реализовал метод PUT
для обновления строки, подобной этой (для краткости я пропустил некоторые несущественные вещи):
[Route("{id}")]
[HttpPut]
public async System.Threading.Tasks.Task<HttpResponseMessage> UpdateRow(int id,
[FromBody]Models.Member model)
{
// Do some error checking
// ...
// ...
var myDatabaseEntity = new BusinessLayer.Member(id);
myDatabaseEntity.FirstName = model.FirstName;
myDatabaseEntity.LastName = model.LastName;
myDatabaseEntity.Created = model.Created;
myDatabaseEntity.BirthDate = model.BirthDate;
myDatabaseEntity.IsDeleted = model.IsDeleted;
await myDatabaseEntity.SaveAsync();
}
Используя PostMan, я могу отправить следующий JSON, и все отлично работает:
{
firstName: "Sara",
lastName: "Smith",
created: '2018/05/10",
birthDate: '1977/09/12",
isDeleted: false
}
Если я отправлю это как тело в http://localhost:8311/api/v1/Member/12
как запрос PUT, запись в моих данных с идентификатором 12 будет обновлена до того, что вы видите в JSON.
Однако я хотел бы реализовать глагол PATCH, в котором я могу выполнять частичные обновления. Если Сара выйдет замуж, я хотел бы отправить этот JSON:
{
lastName: "Jones"
}
Я хотел бы иметь возможность отправлять только этот JSON и обновлять просто поле LastName
и оставлять все остальные поля в покое.
Я попробовал это:
[Route("{id}")]
[HttpPatch]
public async System.Threading.Tasks.Task<HttpResponseMessage> UpdateRow(int id,
[FromBody]Models.Member model)
{
}
Моя проблема в том, что при этом возвращаются все поля в объекте model
(все они равны нулю, кроме поля LastName
), что имеет смысл, поскольку я говорю, что хочу объект Models.Member
. Я хотел бы знать, есть ли способ определить, какие свойства действительно были отправлены в запросе JSON, чтобы я мог обновить только эти поля?