我有以下 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" }
]
我启动了应用程序并在控制器上设置了一个断点。使用正确的租户 ID 和实体 ID 命中断点。但是,entityPatches
没有任何操作:
entityPatches.Operations.Count = 0
因此,无法更新IsAuthorized
目标的属性。EntityModel
我希望该Operations
属性具有一个replace
操作,如 HTTP 请求中所定义。
问题
为什么类的Operations
属性JsonPatchDocument
缺少 HTTP 请求正文中定义的补丁操作?