通过jQuery Ajax向ASP.NET MVC控制器提交Plaid Link结果时部分属性丢失怎么办
问题原因
- 提交的 payload 数据缺失:Plaid Link 的
onSuccess回调中,public_token是独立的第一个返回参数,不在metadata对象内,你当前仅提交了metadata数据,未将public_token合并到提交内容中,导致PublicToken字段为空。 - 控制器参数未绑定 JSON 请求体:ASP.NET MVC 接收
application/json格式的请求时,默认从表单数据绑定参数,你没有给 Action 方法的参数加[FromBody]特性,导致无法正确从请求体的 JSON 中解析数据。 - 请求体结构不匹配:你手动拼接的 JSON 外层多套了一层
results节点,和控制器接收的PlaidLinkResults模型结构不匹配,导致大部分字段无法对应绑定。
解决方案
- 调整前端提交数据结构
修改onSuccess回调,将public_token合并到提交数据中,同时不要手动拼接 JSON 字符串,直接序列化完整对象:
onSuccess: (public_token, metadata) => { document.getElementById('plaidToken').innerHTML = public_token; document.getElementById('plaidMetadata2').value = JSON.stringify(metadata, null, 2); // 合并参数构造完整的提交对象 const postData = { ...metadata, public_token: public_token }; testPost(postData); return true; } function testPost(valueToPost) { $.ajax({ type: "POST", url: "/BankAccount/Link", // 直接序列化提交对象,不需要额外套results层 data: JSON.stringify(valueToPost), contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { alert("Hello: " + response.Name + " .\nCurrent Date and Time: " + response.DateTime); }, failure: function (response) { alert('failure: ' + response.responseText); }, error: function (response) { document.getElementById('plaidMetadata2').value = JSON.stringify(valueToPost); } }); }
- 调整控制器参数绑定规则
给 Action 方法的参数添加[FromBody]特性,指定从 JSON 请求体解析数据:
[HttpPost] public async Task<ActionResult> Link([FromBody] Models.PlaidLinkResults results) { var resultsetToSaveAsLinkedAccounts = results; return View("Index"); }
- 可选校验:确认模型映射匹配
你现有的PlaidLinkResults和Institution模型已经添加了对应的JsonProperty特性,和 Plaid 返回的字段命名匹配,无需额外调整,修改后即可正常绑定所有字段。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

