ASP.NET Core Web API: 如何在参数绑定时将空值分配给请求中缺少的 属性

ASP.NET Core Web API: how to assign value of null to a missing property in the request when parameter binding

使用 .NET 6.0。尝试将参数绑定到请求正文时,我想将值 null 分配给未包含在请求中的属性。

考虑以下几点:

public class SomeRequest
{
    [JsonProperty(PropertyName = "property1")]
    public string prop1 { get; set; }

    [JsonProperty(PropertyName = "property2")]
    public string prop2 { get; set; }       
}

[Route("[controller]")]
[ApiController]
public class MyController : ControllerBase
{
    [HttpPost]
    public async Task<SomeResponse> Post([FromBody] SomeRequest value1)
    {
    }
}

如果我发送以下请求 {"property1":"abc"},我希望 value1{"property1":"abc","property2":null},但我收到 HTTP 400 并显示 property2 为必填。

使 property2 为 null 的最佳方法是什么?我很确定它在 .NET Core 3.1 中是这样工作的。

谢谢

.NET 6 项目具有由 default 启用的可空上下文 - 这意味着 prop2 被视为 non-nullable 字符串。

要按照您的预期行事,可以:

  • 使 prop2 可以为空 (string?)
  • 在项目级别禁用可为空的上下文(csproj 中的<Nullable>disable</Nullable>
    • 这个 可以 也可以使用 pre-processor 指令在源代码级别完成,但它不适用于您的 use-case.