相关文章推荐
[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);
 
推荐文章