我有一个界面,其中profileRoles
字段是一个对象
export interface IRegisterModel extends IModelWithToken {
firstName: string;
fatherName: string;
lastName: string;
email: string;
dateBirth?: string;
regionId: number;
mobilePhone: string;
profileRoles?: { isStudent: boolean };
}
我尝试将其发送到mvc控制器。以下是角度服务方法:
public register(registerModel: IRegisterModel): Observable<any> {
const params = new HttpParams()
.append("userName", registerModel.email)
.append("firstName", registerModel.firstName)
.append("fatherName", registerModel.fatherName)
.append("lastName", registerModel.lastName)
.append("email", registerModel.email)
.append("mobilePhone", registerModel.mobilePhone)
.append("registrationRegionId", registerModel.regionId.toString())
.append("__RequestVerificationToken", registerModel.token);
if (registerModel.dateBirth) {
params.append("dateBirth", registerModel.dateBirth);
}
if (registerModel.profileRoles) {
params.append("profileRoles.isStudent", registerModel.profileRoles.isStudent.toString());
}
return this.httpClient.post("/Account/Register", params);
}
registerModel.profileRoles.isStudent
包含必需的值,但未附加到参数中。我认为profileRoles.isStudent
是错误的语法。我该如何修复并将对象附加到HttpParams?
答案 0 :(得分:1)
根据HttpParams规范,HttpParams是不可变的。
This class is immutable - all mutation operations return a new instance.
https://angular.io/api/common/http/HttpParams
当您尝试附加新参数时,使用
params.append("dateBirth", registerModel.dateBirth);
或
params.append("profileRoles.isStudent", registerModel.profileRoles.isStudent.toString());
,
它并没有改变您原来的params变量。
如第一个引号中所述,所有变异操作都返回一个新实例,因此,append()方法返回一个新的HTTPParams对象。您的代码应该可以通过简单地将其重新分配给params对象来工作。
if (registerModel.dateBirth) {
params = params.append("dateBirth", registerModel.dateBirth);
}
if (registerModel.profileRoles) {
params = params.append("profileRoles.isStudent", registerModel.profileRoles.isStudent.toString());
}
答案 1 :(得分:0)
FileStream
我认为您应该像这样重新定义界面,希望对您有所帮助!