You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular传递日期至C#端时获取到DateTime默认值如何解决

Angular传日期到C#后端获取到DateTime默认值的解决方案

{01/01/0001 00:00:00}是C#中DateTime类型的默认值,出现这个现象说明接口参数绑定阶段,前端传入的日期值没有被成功反序列化,根本原因是前后端日期格式不匹配、反序列化规则不兼容,可按以下步骤排查修复:

前端传参格式修正

  • 不要直接传递05/06/2022这类本地化短日期格式字符串。.NET默认JSON反序列化器优先识别ISO 8601标准日期格式,斜杠分隔的MM/dd/yyyy格式会受服务器区域文化设置影响,很容易解析失败。
  • Angular提交请求前,统一将日期值转换为ISO标准格式再传递,示例代码:
const payload = {
  // 其余业务字段
  DeliveryDate: new Date(selectedDate).toISOString() 
  // 转换后输出格式为 2022-05-06T00:00:00.000Z,可被后端直接识别
}
  • 若业务必须传递MM/dd/yyyy格式的字符串,后端对应字段先设为string类型接收,拿到值后再手动按指定格式解析为DateTime,不要直接绑定DateTime类型做自动反序列化。

后端反序列化规则配置

  • 若使用.NET Core 3.0+默认的System.Text.Json序列化器,可添加自定义日期转换器,兼容指定的日期格式,避免文化差异导致解析失败:
// Program.cs中配置控制器的JSON选项
builder.Services.AddControllers()
  .AddJsonOptions(opt =>
  {
    var dateConverter = new DateTimeJsonConverter("MM/dd/yyyy");
    opt.JsonSerializerOptions.Converters.Add(dateConverter);
  });
  • 若使用Newtonsoft.Json作为序列化器,可直接配置全局日期解析格式和对应文化规则:
builder.Services.AddControllers()
  .AddNewtonsoftJson(opt =>
  {
    opt.SerializerSettings.DateFormatString = "MM/dd/yyyy";
    // 指定en-US文化适配月/日/年的日期排列规则
    opt.SerializerSettings.Culture = new CultureInfo("en-US");
  });
  • 检查接口参数的绑定特性:确认DateTime属性没有配置错误的绑定源(比如错误加了[FromQuery]但日期值是从Body传递的),绑定规则不匹配时也会直接赋值类型默认值。

额外避坑项

  • 注意时区偏移:Angular的toISOString()方法会自动将本地时间转为UTC时间,若业务需要保留本地日期,传递前要根据时区做偏移校正,或者传递不带时区信息的yyyy-MM-dd纯日期字符串。
  • 全链路统一日期格式为ISO 8601是兼容性最高的方案,尽量不要在跨端调用时传递本地化自定义格式的日期字符串,从根源避免解析失败问题。

内容的提问来源于stack exchange,提问作者elisheva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:33:30