代码之家  ›  专栏  ›  技术社区  ›  Martin Cooke

如何在C#.net core 3.1中的MVC控制器中传递json变量

  •  0
  • Martin Cooke  · 技术社区  · 4 年前

    我在网上学习了很多教程,但仍然得到了相同的结果。Microsofts的文档非常深入,考虑到我想要的只是向控制器发送一个变量。

    我的客户端代码如下所示:

    var obj = { send: 'test' };
    
        $.ajax({
            url: '/Countries/GetVotes',
            type: 'POST',
            contentType: "application/json",
            data: JSON.stringify(obj),
            success: function (data) {
                if (data === null) {
                    // TODO
                } else {
                    console.log(data);
                }
            },
            error: function (error) {
                console.log(error);
            }
        }); 
    

    然后控制器将如下所示:

    [HttpPost]
        public async Task<JsonResult> GetVotes(string send)
        {
            try
            {
                var votes = ctx.Candidates.Where(x => x.Country == send)
                    .OrderByDescending(x => x.Votes)
                    .ToList();
                
                return Json(votes);
    
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
    
            return Json("foo");
        }
    

    所有这些都是标准的,并且曾经在.NETFramework4.7.2中工作过,任何完成MVC的人都非常熟悉这种方法。

    我决定尝试使用.NETCore3.1。我遇到了所有正确的断点,问题是名为“send”的字符串作为null发送到我的控制器。

    有人知道最简单的方法吗?

    2 回复  |  直到 4 年前
        1
  •  1
  •   emagers    4 年前

    您传递的是一个JSON对象

    { send: "test" }
    

    在控制器的请求主体中,您所期望的只是一个字符串。您可以尝试创建表示所需数据结构的请求对象:

    public class Request {
        public string send { get; set; }
    }
    

    然后可以将控制器方法更新为

    public async Task<JsonResult> GetVotes([FromBody]Request request) 
    

    并通过request.send进一步访问send属性。

        2
  •  0
  •   Serge    4 年前

      $.ajax({
            url: '/Countries/GetVotes',
            type: 'POST',
         
            data: obj,
            success: function (data) {
                if (data === null) {
                    // TODO
                } else {
                    console.log(data);
                }
            },
            error: function (error) {
                console.log(error);
            }
        }); 
    
    推荐文章