【发布时间】:2019-03-07 09:26:55
【问题描述】:
我有一个 ASP.NET 应用程序,它由一个前端组成,该前端包含一个表单,我希望将其数据传递到我的 C# 后端。为此,我使用 JQuery 发布请求来序列化表单数据并使用 JSON 将其发送到控制器。下面是我调用控制器路由的 Javascript 代码;
$(".data-submit").on("click",
function(event) {
var formArray = $("#amend-form").serializeArray();
var json = JSON.stringify(formArray);
$.post(windowLocationOrigin() +
"/Instruction/AmendData",
json,
function (data) {
alert("api endpoint called");
});
});
这里是被调用的控制器端点
[Route("[controller]/AmendData")]
public IActionResult AmendPortingData([FromBody] string json)
{
return Ok(json);
}
当我通过前端提交此表单时,会调用 onClick JS 事件并发送发布请求,但控制器端点永远不会被命中。我在return Ok(json) 行有一个断点,在提交表单后永远不会触发。
如果我签入开发人员工具,我会收到 500 错误消息:POST https://localhost:44358/Instruction/AmendData 500
但是,如果我随后向此 url https://localhost:44358/Instruction/AmendData?json=123 提交请求,则端点被正确命中,我可以在调试器中看到值 123。
但是我希望能够通过 post 请求正文而不是通过 url 发送我的数据,因为要提交的表单很大并且包含太多需要通过 GET 发送的数据。
我尝试将 [HttpPost] 属性添加到控制器端点,但这会产生完全相同的行为,只是它不允许 GET url 工作。
【问题讨论】:
-
尝试更改为:
var json = { json: JSON.stringify(formArray) }; -
@freedomn-m 这解决了我的问题,谢谢!你能解释一下为什么不这样做会导致问题吗?我想确切地知道为什么这会导致问题。
标签: javascript jquery asp.net asp.net-mvc