ASP NET core Web API 对于空字符串的处理
有如下接口
[HttpGet]
public async object Index([FromQuery] DateTime? datetime)
当前端调用接口 localhost/test/index 的时候 此时datetime的参数为空 null
当前端调用接口 localhost/test/index?datetime= 的时候 此时datetime的参数为空字符串 "" string.Empty 空字符串无法默认绑定至null 所以接口返回错误400
可以添加自定义转换器使得空字符串绑定至null
采用同样的方法可以处理任何接口参数格式转换的问题,如失败时返回默认值
/// <summary>
/// Json日期转换器 空字符串转为可为空的datetime时返回null, 其余格式不变</code>
/// </summary>
class JsonConverterDateTimeStandard : System.Text.Json.Serialization.JsonConverter<DateTime?>
{
/// <inheritdoc cref="System.Text.Json.Serialization.JsonConverter{T}.Read(ref Utf8JsonReader, Type, JsonSerializerOptions)"/>
public override DateTime? Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) =>
reader.GetString() == "" ? null : reader.GetDateTime();
/// <inheritdoc cref="System.Text.Json.Serialization.JsonConverter{T}.Write(Utf8JsonWriter, T, JsonSerializerOptions)"/>
public override void Write(System.Text.Json.Utf8JsonWriter writer, DateTime? dateTimeValue, System.Text.Json.JsonSerializerOptions options)
{
if (dateTimeValue is null)
{
writer.WriteNullValue();
}
else
{
writer.WriteStringValue(dateTimeValue.Value);
}
}
}

浙公网安备 33010602011771号