Ajax 添加[FromBody]属性会导致404
我有一个操作,它使用一个简单的字符串参数,我使用Ajax向它发送数据,如下所示:Ajax 添加[FromBody]属性会导致404,ajax,asp.net-core,asp.net-core-mvc,asp.net-core-2.0,Ajax,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.0,我有一个操作,它使用一个简单的字符串参数,我使用Ajax向它发送数据,如下所示: [HttpPost] public async Task<IActionResult> Add(string data) $.ajax({ type: "POST", url: "/Items/Add", data: { data: item } }) [HttpPost] public async Ta
[HttpPost]
public async Task<IActionResult> Add(string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: {
data: item
}
})
[HttpPost]
public async Task<IActionResult> Add([FromBody] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "text/plain"
})
$.ajax({
type: "POST",
url: "/Items/Add",
data: JSON.stringify(item),
contentType: "application/json"
})
var dataObject = {
data: '=' + item,
}
$.ajax({
type: 'POST',
url: '/Items/Add',
dataType: 'json',
contentType: dataType,
data: dataObject,
success: function(result) {
console.log(result);
}
});
[HttpPost]
public async Task<IActionResult> Add([FromForm] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "application/x-www-form-urlencoded"
})
添加
application/json
修复了404,但随后数据为空。我必须将其更新为“'=“+item+””
,以便在操作中传递值,但是“=”仍然是数据的一部分,因此我不知道=前缀在文档中的含义。首先需要格式化请求后的正文数据。它应该是这样的:
[HttpPost]
public async Task<IActionResult> Add(string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: {
data: item
}
})
[HttpPost]
public async Task<IActionResult> Add([FromBody] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "text/plain"
})
$.ajax({
type: "POST",
url: "/Items/Add",
data: JSON.stringify(item),
contentType: "application/json"
})
var dataObject = {
data: '=' + item,
}
$.ajax({
type: 'POST',
url: '/Items/Add',
dataType: 'json',
contentType: dataType,
data: dataObject,
success: function(result) {
console.log(result);
}
});
[HttpPost]
public async Task<IActionResult> Add([FromForm] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "application/x-www-form-urlencoded"
})
在你的行动中:
[HttpPost]
public async Task<IActionResult> Add([FromBody] string data)
{
}
[HttpPost]
公共异步任务添加([FromBody]字符串数据)
{
}
我不确定这里的文本/普通内容类型,但您的问题可以通过做两件事来解决:
将[FromBody]
更改为[FromForm]
-[FromBody]仅适用于json数据(我相信),这将解释为什么更新的示例有效。。。某种程度上。但是因为模型绑定器现在显式地寻找JSON,所以您必须添加引号,最终得到错误的答案
将内容类型更改为application/x-www-form-urlencoded
看起来是这样的:
[HttpPost]
public async Task<IActionResult> Add(string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: {
data: item
}
})
[HttpPost]
public async Task<IActionResult> Add([FromBody] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "text/plain"
})
$.ajax({
type: "POST",
url: "/Items/Add",
data: JSON.stringify(item),
contentType: "application/json"
})
var dataObject = {
data: '=' + item,
}
$.ajax({
type: 'POST',
url: '/Items/Add',
dataType: 'json',
contentType: dataType,
data: dataObject,
success: function(result) {
console.log(result);
}
});
[HttpPost]
public async Task<IActionResult> Add([FromForm] string data)
$.ajax({
type: "POST",
url: "/Items/Add",
data: "=" + item,
contentType: "application/x-www-form-urlencoded"
})
[HttpPost]
公共异步任务添加([FromForm]字符串数据)
$.ajax({
类型:“POST”,
url:“/Items/Add”,
数据:“=”+项,
contentType:“application/x-www-form-urlencoded”
})
现在,路由将匹配,模型绑定器将把数据
视为一个表单,很容易将=item
默认为您的操作参数
旁注:我怀疑您得到的是不受支持的415介质,而不是404。可能应该是{data:'='+item}
??是item JSON还是字符串?item
只是字符串值。仍然是404。如果是数据格式问题,我希望数据在操作中为空,但仍然可以访问该操作。idk,Vivaldi说找不到404。正如您所说,现在它正在工作,item
通过没有“=”的操作。