【发布时间】:2023-01-11 16:32:58
【问题描述】:
我在将 .Net 6 中的 DateOnly 和 TimeOnly 值发送到数据库时遇到困难。
关于这个问题,我在这里阅读了多个答案,并且都尝试过了,但仍然显示错误 400
这是我制作的转换器
public class DateOnlyJsonConverter : JsonConverter<DateOnly>
{
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var value = reader.GetString();
return DateOnly.Parse(value!);
}
public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
}
暂时的
public class TimeOnlyJsonConverter : JsonConverter<TimeOnly>
{
public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var value = reader.GetString();
return TimeOnly.Parse(value!);
}
public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("HH:mm:ss.fff"));
}
}
我还在 program.cs 上添加了这个
builder.Services.AddControllers().AddJsonOptions(
options =>
{
options.JsonSerializerOptions.Converters.Add(new DateOnlyJsonConverter());
options.JsonSerializerOptions.Converters.Add(new TimeOnlyJsonConverter());
}
这是控制器上的代码
[HttpPost]
public async Task<IActionResult> CheckIn(Absensi request)
{
var absensis = new Absensi()
{
IDKaryawan = request.IDKaryawan,
NamaKaryawan = request.NamaKaryawan,
IDPerusahaan = request.IDKaryawan,
NamaPerusahaan = request.NamaKaryawan,
Tanggal = DateOnly.FromDateTime(DateTime.Now),
WaktuCheckIn = TimeOnly.FromDateTime(DateTime.Now),
// WaktuCheckOut = TimeOnly.FromDateTime(DateTime.Now),
BluetoothId = request.BluetoothId,
AlamatLatitude = request.AlamatLatitude,
AlamatLongtitude = request.AlamatLongtitude,
Telat = request.Telat,
};
await _context.Absensis.AddAsync(absensis);
await _context.SaveChangesAsync();
return Ok("Absensi Created!");
}
然而,当它通过 swagger 执行时仍然显示错误 400
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-6756849f7366cabf4b0d7d8289fc4173-53ac44cc08885df5-00",
"errors": {
"request": [
"The request field is required."
],
"$.tanggal": [
"The JSON value could not be converted to System.DateOnly. Path: $.tanggal | LineNumber: 5 | BytePositionInLine: 14."
]
}
}
请让我知道我做了什么以及如何解决它。谢谢你
【问题讨论】:
-
如果我没记错的话,您需要修改
Absensi类型并添加一个属性以指定将使用您的转换器解析DateOnly属性 -
@PabloRecalde 您是指 Absensi 模型还是数据库上下文?如果你能指导我如何去做,我将不胜感激,因为我还没有找到任何相关信息。谢谢,麻烦您了。
标签: asp.net-mvc asp.net-core asp.net-web-api .net-6.0 dateonly