ASP NET core Web API 對於空字串的處理
阿新 • • 發佈:2021-10-28
有如下介面
[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); } } }