У меня есть следующий основной контроллер ASP.net:
[ApiVersion(ApiConstants.Versions.V1)]
[Route(RouteConstants.ApiControllerPrefix + "/tenants/" + RouteConstants.TenantIdRegex + "/entities")]
public class EntityController
{
[HttpPatch]
[SwaggerOperation(OperationId = nameof(PatchEntity))]
[Route("{controlId:guid}", Name = nameof(PatchEntity))]
[SwaggerResponse(StatusCodes.Status204NoContent, "Result of the patch")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Consumes(MediaTypes.Application.JsonPatch)]
public async Task<IActionResult> PatchEntity(string tenantId, Guid entityId, JsonPatchDocument<EntityModel> entityPatches)
{
//
}
}
Контроллер позволяет мне исправлять существующую сущность.Вот модель:
[JsonObject(MemberSerialization.OptIn)]
public class EntityModel
{
[JsonProperty(PropertyName = "isAuthorized")]
public bool IsAuthorized { get; set; }
}
Для моего теста я использую postman
для отправки патча на объект.Я выбрал глагол PATCH
, нацеленный на этот URL:
http://localhost:5012/api/v1/tenants/tenant-id/entities/01111111-0D1C-44D6-ABC4-2C9961F94905
В заголовках я добавил запись Content-Type
и установил ее на application/json-patch+json
.
Вот телозапроса:
[
{ "op": "replace", "path": "/isAuthorized", "value": "false" }
]
Я запустил приложение и установил точку останова на контроллере.Достигнута точка останова с правильным идентификатором клиента и идентификатором объекта.Однако entityPatches
не выполняет никаких операций:
entityPatches.Operations.Count = 0
Следовательно, свойство IsAuthorized
целевого EntityModel
не может быть обновлено.Я ожидал, что у свойства Operations
будет одна операция replace
, как определено в HTTP-запросе.
Вопрос
Почему свойство Operations
класса JsonPatchDocument
, в котором отсутствуют операции исправления, определенные в теле HTTP-запроса?