[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();
writer.WriteStringValue(dateTimeValue.Value);