【问题标题】:Why passed param with Ajax to controller in ASP.NET Core is always NULL?为什么使用 Ajax 将参数传递给 ASP.NET Core 中的控制器始终为 NULL?
【发布时间】:2023-04-09 11:34:02
【问题描述】:

它可以工作,但传递的参数始终为空,此代码在我的 ASP.NET Framework(.Net Framework) 上的其他项目上工作,但在 ASP.NET Core 中不工作。

var inputParams = "{namex: '" + 'testdata' + "'}";

var xhr = $.ajax({
    url: "/Test/MyFunction",
    type: 'POST',
    dataType: 'json',
    data: inputParams,
    contentType: 'application/json; charset=utf-8',
    success: function (msg) {

    },
    error: function (xhr) {

    }
});

测试控制器包含:

   [HttpPost]
   public JsonResult MyFunction(string namex) <--- namex is always NULL
    {
        return Json(false);
    }

【问题讨论】:

    标签: c# asp.net-core parameter-passing asp.net-ajax


    【解决方案1】:

    数据未以正确的格式发送,内容无法正确绑定到操作

    首先正确构建要发布的有效负载

    var inputParams = { namex: "testdata" }; //<-- NOTE JavaScript
    
    var xhr = $.ajax({
        url: "/Test/MyFunction",
        type: 'POST',
        dataType: 'json',
        data: JSON.stringify(inputParams), //<-- NOTE CONVERSION TO JSON
        contentType: 'application/json; charset=utf-8',
        success: function (msg) {
    
        },
        error: function (xhr) {
    
        }
    });
    

    接下来创建一个模型来保存服务器端的数据

    public class MyModel {
        public string namex { get; set;}
    }
    

    最后重构操作以绑定到请求正文中的预期数据

    [HttpPost]
    public IActionResult MyFunction([FromBody]MyModel model) {
        if(ModelState.IsValid) {
            string namex = model.namex;
            return Ok();
        }
        return BadRequest(ModelState);
    }
    

    参考Model Binding in ASP.NET Core

    【讨论】:

    • 我找到了另一个像你这样的答案,但是为什么我要创建一个模型(MyModel)只是为了将一个简单的变量传递给我的控制器,如果不创建一个额外的模型就没有办法做到这一点?
    • @motevalizadeh 是如何使用实际代码的?我只是建议在 Asp.Net Core 中用于模型绑定的文档最推荐的方法。查看答案中提供的链接。
    【解决方案2】:

    将 FromBodyAttribute 添加到参数

    MyFunction([FromBody] 字符串名称x)

    【讨论】:

      【解决方案3】:

      只是发送,没有对象

      var inputParams = 'testdata';
      
      var xhr = $.ajax({
          url: "/Test/MyFunction",
          type: 'POST',
          dataType: 'json',
          data: inputParams,
          contentType: 'application/json; charset=utf-8',
          success: function (msg) {
      
          },
          error: function (xhr) {
      
          }
      });
      


      
      var xhr = $.ajax({
          url: "/Test/MyFunction?namex=testdata", // <------ here
          type: 'POST',
          dataType: 'json',
          contentType: 'application/json; charset=utf-8',
          success: function (msg) {
      
          },
          error: function (xhr) {
      
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 1970-01-01
        相关资源
        最近更新 更多