【问题标题】:ASP.NET 5 Controller method can't receive JSON POST, ASP.NET 4 controller method doesASP.NET 5 控制器方法不能接收 JSON POST,ASP.NET 4 控制器方法可以
【发布时间】:2016-05-01 08:16:00
【问题描述】:

我一直在扯头发。我有两个项目,一个运行ASP.NET 4,另一个运行ASP.NET 5 RC1

项目控制器ASP.NET 5接收到的POST方法输入参数均为默认值,并非网页传来的值。

为了缩小问题范围,我在两个项目中简化了控制器 POST 方法

[HttpPost]
public JsonResult DataHandler(int Draw)
{
    //above Draw variable not set
}

并在方法上放置一个断点来捕获变量Draw。该网页为Draw 参数发送一个值为1 的JSON 帖子。但是在 ASP.NET 5 中,该值为 0(默认值),而我发送的其他参数为 null 而不是具有值。在“ASP.NET 4”中是正确的。

我正在使用 jquery datatablesthis ASP.NET 4 项目中使用的相同代码

var oTable = $('#datatab').DataTable({
    "serverSide": true,
    "ajax": {
        "type": "POST",
        "url": '/Home/DataHandler',
        "contentType": 'application/json; charset=utf-8',
        'data': function (data) { return data = JSON.stringify(data); }
    },
    "dom": 'frtiS',
    "scrollY": 500,
    "scrollX": true,
    "scrollCollapse": true,
    "scroller": {
        loadingIndicator: false
    },
    "processing": true,
    "paging": true,
    "deferRender": true,
    "columns": [
   { "data": "Name" },
   { "data": "City" },
   { "data": "Postal" },
   { "data": "Email" },
   { "data": "Company" },
   { "data": "Account" },
   { "data": "CreditCard" }
    ],
    "order": [0, "asc"]
});

我使用Fiddler 并比较了两个项目发送到控制器的JSON 和发布到/Home/DataHandlerJSON 内容完全相同,即Draw=1

{"draw":1,"columns":[{"data":"Name","name":"","searchable":true,"orderable":true,"search":{"value ":"","re​​gex":false}},{"data":"City","name":"","searchable":true,"orderable":true,"search":{"value": "","re​​gex":false}},{"data":"Postal","name":"","searchable":true,"orderable":true,"search":{"value":"" ,"regex":false}},{"data":"Email","name":"","searchable":true,"orderable":true,"search":{"value":""," regex":false}},{"data":"Company","name":"","searchable":true,"orderable":true,"search":{"value":"","re​​gex" :false}},{"data":"Account","name":"","searchable":true,"orderable":true,"search":{"value":"","re​​gex":false }},{"data":"CreditCard","name":"","searchable":true,"orderable":true,"search":{"value":"","re​​gex":false}} ],"order":[{"column":0,"dir":"asc"}],"start":0,"length":126,"search":{"value":"","re​​gex ":假}}

我尝试过的事情。

  • 我在项目之间使用了相同的html table 内容和上面的代码.js 文件
  • 将我的控制器输入参数设置为小写,例如draw
  • 比较fiddler中的JSONPOST数据是一样的
  • POST方法输入变量上放置一个断点,以便在它发布后立即捕获该值

【问题讨论】:

  • 尝试从 DataTable 设置的 ajax 部分中删除 contentTypedata
  • 尝试像this answer一样添加[FromBody]属性
  • 谢谢丹尼尔。成功了

标签: datatables asp.net-core asp.net-core-mvc


【解决方案1】:

在ajax调用中添加dataType: 'json'

return data = JSON.stringify(data) 替换为以下内容:

return data.Draw = JSON.stringify(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多