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.
使用 .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.