使用ASP.NET内核的Ajax

使用ASP.NET内核的Ajax,ajax,asp.net-core,Ajax,Asp.net Core,我正在进行一个项目,需要在服务器端使用ASP.NET核心将一些数据发送到我的SQL Server。 在客户端,我使用Javascript运行我的应用程序,该应用程序向我发送需要保存的对象数组。 因此,我认为使用Ajax将数据发送到我的控制器,然后再发送到我的服务器(使用EF)可能是一个好主意。 问题是我甚至不能发送这样的字符串:var x=“first try”发送到我的控制器,因为我有以下错误(400):解析XML时出错:未找到元素。 我尝试了多种方法,比如删除datatype:'text'或

我正在进行一个项目,需要在服务器端使用ASP.NET核心将一些数据发送到我的SQL Server。 在客户端,我使用Javascript运行我的应用程序,该应用程序向我发送需要保存的对象数组。 因此,我认为使用Ajax将数据发送到我的控制器,然后再发送到我的服务器(使用EF)可能是一个好主意。 问题是我甚至不能发送这样的字符串:
var x=“first try”发送到我的控制器,因为我有以下错误(400):
解析XML时出错:未找到元素
。 我尝试了多种方法,比如删除
datatype:'text'
datatype:'json'
或强制
MIMETYPE
text

以下是我所做的:

视图:

function save (){
   var jsonStringify = JSON.stringify({value : "yo"});
   $.ajax({
      type : 'POST',
      url : "@Url.Action("saveChart")",
      data : {"jsonData" : jsonStringify},
      datatype : "text"
   });
}
我已经尝试更改数据类型,Url。控制器的我的路径=我的网站/HomeController/saveChart

控制器:

[HttpPost]
public IActionResult  saveChart(string jsonData){
   ChartClass chart = new ChartClass();
   int nbr = _connection.Chart.Count();
   chart.value = "check connection controler";
   chart.id = nbr + 1;
   this._connection.Chart.Add(chart);
   this_connection.SaveChanges();
   return View("Views/Home/Chart.cshtml");
}
我试着把
[FromBody]
放进去,但还是什么都没有

型号:

public class ChartClass(){
   [Key]
   public int id {get; set;}

   public string valeur {get; set;}
}

但是我可以使用html表单访问我的数据库,从而访问我的控制器,该表单带有
asp action=“saveChart”asp controller=“Home”
默认的
contentType
将是
application/x-www-form-urlencoded;charset=UTF-8
,要向您的
saveChart
操作方法发出带有已发布数据的Ajax请求,您可以尝试:

$.ajax({
    type: 'POST',
    url: "@Url.Action("saveChart")",
    data: {
        "jsonData": "yo"
    },
    datatype: "text"

    //... 
测试结果


您似乎没有在操作代码逻辑中使用参数
jsonData
。那么代码只是为了测试吗?是的,我只是想知道我的Ajax调用是否可以运行。它通过在我的Ajax调用中添加(我必须):
beforeSend:function(xhr){xhr.setRequestHeader(“RequestVerificationToken”),$('input:hidden[name=“\uu RequestVerificationToken”]”).val()}
。和我的控制器中的
[ValidateAntiForgeryToken]
。但是现在,如果我离开ContentType:'application/json',我的jsonData将为null。为什么?我发送的json不是带有
数据:{“jasonData”:“yo”}
?可以防止CSRF攻击,如果令牌无效,这可能会导致HTTP 400错误,它不应该导致模型绑定错误。
如果我离开ContentType:'application/json',我的jsonData为null。为什么?
数据将通过请求正文传递,您可以尝试将
[FromBody]
属性应用于参数
saveChart([FromBody]string jsonData)
。并使用
data:JSON.stringify(“yo”)
.Hi@Crakenar修改ajax数据选项。如果解决方案确实有助于解决问题,请接受它作为答案。