c# - 如何在 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”的字符串作为空值发送到我的控制器。
有谁知道让这个工作的最简单方法?
解决方案
你传入的是一个 JSON 对象
{ send: "test" }
您在控制器的请求正文中所期望的只是一个字符串。您可以尝试创建一个代表您期望的数据结构的请求对象:
public class Request {
public string send { get; set; }
}
然后你可以更新你的控制器方法
public async Task<JsonResult> GetVotes([FromBody]Request request)
并通过 request.send 进一步访问 send 属性。
推荐阅读
- actions-on-google - 可以从操作控制台导入/导出 Google 操作吗?
- reactjs - 如果使用 useEffect 更改了另一个过滤器,则重置为第一页
- python - 试图发送一个 Scrapy 爬虫来爬取从其第一个目的地拉出的一批链接(递归爬取)。怎么做?
- css - 在头像图像设置高度=自动不起作用
- html - 如果使用 iTextsharp 第一页的某些内容和第二页的某些内容,想要将整个表格 tr 移动到下一页
- perl - 关于 perl 引用优先级的困惑
- python - 为 PyQtWebEngine 的隐身模式添加选项卡
- asp.net-mvc - 在 Linq 中使用 GroupBy 时如何通过用户 ID 获取内容
- javascript - 从给定的数字返回最大可能的数字?javascript
- c++ - int[8][8] 类型的参数变成 int(*)[8]