【问题标题】:How do you pass a json variable in an MVC controller in C# .net core 3.1如何在 C# .net core 3.1 的 MVC 控制器中传递 json 变量
【发布时间】:2021-12-07 17:29:36
【问题描述】:

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

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

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”的字符串作为 null 发送到我的控制器。

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

【问题讨论】:

  • 你有什么错误吗?
  • 嗨,不,在控制器变量中看不到任何只是一个空值

标签: c# json .net asp.net-mvc asp.net-core


【解决方案1】:

你传入的是一个 JSON 对象

{ send: "test" }

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

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

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

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

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

【讨论】:

  • 完美且非常快速的响应,如此简单。为什么每个教程都这么复杂,这更容易理解,再次感谢您:)
【解决方案2】:

当您已经发送字符串时,您不需要字符串化。并删除内容类型。默认就可以了。

所以试试这个

  $.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);
        }
    }); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2016-05-04
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多