首页 > 解决方案 > 如何在 C# .net core 3.1 的 MVC 控制器中传递 json 变量

问题描述

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

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

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");
    }

所有标准并且曾经在 .NET 框架 4.7.2 中工作,任何做过 MVC 的人都会非常熟悉这种方法。

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

有谁知道让这个工作的最简单方法?

标签: c#json.netasp.net-mvcasp.net-core

解决方案


你传入的是一个 JSON 对象

{ send: "test" }

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

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

然后你可以更新你的控制器方法

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

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


推荐阅读