Ajax 添加[FromBody]属性会导致404

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

我有一个操作,它使用一个简单的字符串参数,我使用Ajax向它发送数据,如下所示:

[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
    通过没有“=”的操作。