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

Angular端4位数字ID在.NET后端被解析为日期格式的问题

Angular提交学生数据时4位数字ID被.NET后端解析为日期的问题

在Angular项目中提交学生数据时,前端模型的id字段为数字类型,但.NET后端接收时,仅4位数字的id会被解析为日期格式(例如值为4781时,后端显示为1970-01-01T02:00:04.781),5位及以上数字则显示正常。该问题在FormDataWithFilesDto反序列化前就已出现。

前端控制台输出显示模型id为数字,但Network面板及后端收到的FormData中,id已变为日期字符串。

已尝试的解决措施

  • 按类型创建Angular模型并提交,结果无变化;
  • 使用parseInt替代Number进行类型转换,问题依旧;
  • 将id转为字符串提交,仍显示为日期格式。

相关代码

Angular组件代码

export class MyComponent extends BaseComponent implements OnInit {
  studentId = 0;

  ngOnInit(): void {
    this.studentId = Number(this.config.data.studentId || '0');
    console.log(typeof(this.studentId)) // 控制台显示为number类型
  }

  saveStudent() {
    const model = {
      id: this.studentId,
      // 其他属性
    }

    this.myService.saveStudent(model).subscribe(result => {
      if (result.resultType == ResultType.Success) {
        this.ch.messageHelper.showSuccessMessage(result.messages.toString());
      } else {
        this.ch.messageHelper.showErrorMessage(result.messages.toString());
      }
    });
  }
}

.NET后端接口代码

[HttpPost]
public async Task<ServiceResult> SaveStudent([FromForm] FormDataWithFilesDto formDataWithFilesDto)
{
  return await _myService.SaveStudent(JsonConvert.DeserializeObject<SaveStudentDto>(formDataWithFilesDto.FormData), formDataWithFilesDto.UploadedFiles).ConfigureAwait(false);
}

FormDataWithFilesDto定义

public class FormDataWithFilesDto
{
  public string FormData { get; set; }
  public long? RefId { get; set; }
  public List<FileUploadDto> UploadedFiles { get; set; }
  public T GetData<T>()
  {
    if (FormData != null)
    {
      return JsonConvert.DeserializeObject<T>(FormData);
    }
    return default(T);
  }
}

SaveStudentDto定义

public class SaveStudentDto
{
  public int Id { get; set; }
  // 其他属性
}

Angular服务代码

saveStudent(model: any) {
  return this.httpHelper.post<any>(
    this.moduleport,
    this.controllerName,
    'SaveStudent',
    this.ch.createFormDataWithFiles(['saveStudentFile'], model)
  );
}

createFormDataWithFiles函数

createFormDataWithFiles(fileParameterNames: string[], additionalObject: any) {
  const formData = new FormData();
  const fileObjectName = 'uploadedFiles';
  const additionalObjectName = 'formData';
  for (let i = 0; i < fileParameterNames.length; i++) {
    const fileParameterName = fileParameterNames[i];
    formData.append(`${fileObjectName}[${i}].value`, fileParameterName.toString());
    const files = this.globals.fileUploadFormData.getAll(fileParameterName);
    for (const file of files) {
      formData.append(`${fileObjectName}[${i}].files`, file);
    }
  }
  if (!this.isNullOrUndefined(additionalObject) && !this.isNullOrWhiteSpace(additionalObjectName)) {
    formData.append(additionalObjectName, JSON.stringify(additionalObject));
  }
  return formData;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:05:59