【发布时间】:2018-02-07 19:46:50
【问题描述】:
我有一个带有简单字符串参数的操作,我使用 Ajax 向它发送数据,如下所示:
[HttpPost]
public async Task<IActionResult> Add(string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: {
data: item
}
})
这很好用,但是在阅读了 ASP.NET Core 中的模型绑定简单类型之后,我了解到您可以使用 [FromBody] 属性并在值前面加上 '=' 前缀,所以我按照如下示例重写了它:
[HttpPost]
public async Task<IActionResult> Add([FromBody] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "text/plain"
})
但是,在这样做之后,我的操作不再被命中,并且 ajax 请求返回 404。无论是否设置 contentType: "text/plain",都会发生这种情况,尽管我注意到我的请求有效负载在第二个中未设置 contentType 时为空例子。
更新:我已经通过像这样重写 Ajax 请求使 [FromBody] 属性工作:
$.ajax({
type: "POST",
url: "/Items/Add",
data: JSON.stringify(item),
contentType: "application/json"
})
添加application/json 修复了 404,但随后数据为空。我必须将其更新为 "'=" + item + "'" 以便在操作中通过该值,但是“=”仍然是数据的一部分,所以我不明白文档中 = 前缀的全部含义.
【问题讨论】:
-
也许应该是
{data: '='+item}??? -
项目是 JSON 还是字符串?
-
item只是一个字符串值。
标签: ajax asp.net-core asp.net-core-mvc asp.net-core-2.0