1. 程式人生 > 其它 >ASP NET core Web API 對於空字串的處理

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);
			}
		}
	}