如果有效载荷包含意外字段,如何返回BadRequest

Ari*_*ion 1 c# json.net asp.net-core

我正在尝试进行PATCH操作,如果请求正文包含未在合同中指定的字段,则该操作将失败。例如,如果我调用此方法:

[HttpPatch("{id}")]
public async Task<ActionResult> PatchResource(
    [FromRoute][Required] Guid id,
    [FromBody][Required] PatchRequest request) {/* whatever */}
Run Code Online (Sandbox Code Playgroud)

这里PatchRequest

public class PatchRequest
{
    public string Name { get; }
    public string Address { get; }
    public PatchRequest(string name, string address) { Name = name; Address = address; }
}
Run Code Online (Sandbox Code Playgroud)

400 (Bad Request)如果我收到这样的请求正文,我想返回并可能附带解释

{
  "name": "Adam",
  "address" "NY City",
  "additional": true
}
Run Code Online (Sandbox Code Playgroud)

我想回来

400(错误请求)-没想到属性“附加”

我知道,如果我将自定义序列化程序设置为on PatchRequest,则在这种情况下可以通过引发异常来轻松获得,但是这没有任何意义,因为这里的请求是错误的,而不是服务器。MissingMemberHandlingError500 (Internal Server Error)

Det*_*chu 5

PatchRequest模型中,添加JsonExtensionsData属性

public class PatchRequest
{
    public string Name { get; }
    public string Address { get; }
    public PatchRequest(string name, string address) { Name = name; Address = address; }

    // extra fields
    [JsonExtensionData]
    private IDictionary<string, JToken> _extraStuff;
}
Run Code Online (Sandbox Code Playgroud)

然后,在控制器中,如果_extraStuff不为空,则会收到其他字段。