And*_*ian 2 asp.net-mvc binding .net-core asp.net-core-webapi angular
我的控制器中有该发布请求:
[HttpPost("subscriptions")]
[Authorize(Policy = Policies.Admin)]
public async Task<IActionResult> PostSubscription([FromBody] PostSubscriptionBindingModel model) { ... }
Run Code Online (Sandbox Code Playgroud)
哪里PostSubscriptionBindingModel:
public class PostSubscriptionBindingModel
{
[Required]
public DateTime StartsOn { get; set; }
[Required]
public DateTime ExpiresOn { get; set; }
[Required]
public Gym Gyms { get; set; }
[Required]
public int SubscriptionTypeId { get; set; }
[Required]
public string UserId { get; set; }
public PaymentBindingModel Payment { get; set; }
public class PaymentBindingModel
{
[Required]
public double Amount { get; internal set; }
[Required]
public PaymentType Type { get; internal set; }
[RequiredArray]
public InstalmentBindingModel[] Instalments { get; internal set; }
public class InstalmentBindingModel
{
[Required]
public double Amount { get; internal set; }
public DateTime? ExpiresOn { get; internal set; }
[Required]
public bool IsSetPaid { get; internal set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Angular(v.6)方面,我有一个使用此方法的服务:
postSubscription(model: IPostSubscription): Observable<ISubscription> {
return this.http.post<ISubscription>(this.originUrl + '/api/subscriptions', model)
.catch((reason: any) => this.handleError(reason));
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将对象发布到 Web api 控制器时,在 Angular 服务postSubscription方法内部模型已完全初始化,在 Web api 端,只有对象的第一级具有值。属性Payment(嵌套类型PaymentBindingModel)不为 null,但其属性未初始化,就像它们未绑定一样。
我怎么解决这个问题?
编辑(添加图像)
编辑2(添加客户端代码后模型)
export interface IPostSubscription {
startsOn: Date;
expiresOn: Date;
gyms: Gym;
subscriptionTypeId: number;
userId: string;
payment?: ISubscriptionPayment;
}
export interface ISubscriptionPayment {
amount: number;
type: PaymentType;
instalments: ISubscriptionPaymentInstalment[];
}
export interface ISubscriptionPaymentInstalment {
amount: number;
expiresOn?: Date;
isSetPaid: boolean;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!
为了使模型绑定正常工作,属性的get和访问器set应该是默认的,它位于public公共属性上。使用访问器private、internal、 或protected将导致模型绑定失败。
大多数时候你甚至不会得到错误;属性将仅显示属性数据类型的默认值。
模型绑定器使用来自外部源的数据设置属性,因此它们需要可公开访问。
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |