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
相关产品推荐
相关产品推荐

