You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ASP.NET中通过AJAX读取JSON遇阻,求解决方案

解决ASP.NET后端接收AJAX发送的JSON数据问题

问题分析

当前代码存在两处核心问题:

  • 前端AJAX默认以表单编码格式发送数据,而非JSON格式,后端无法正确解析
  • 后端控制器方法逻辑错误,内置的静态方法是用于发送HTTP请求获取JSON,而非接收前端传来的JSON数据

前端代码修正

修改AJAX请求,指定JSON contentType并序列化数据:

<script>
function sendValues() {
    var message = document.getElementById('message');
    
    $.ajax({
        type: "POST",
        url: "api/FilterSubmit",
        // 指定发送内容类型为JSON
        contentType: "application/json",
        // 将数据序列化为JSON字符串
        data: JSON.stringify({
            NetworkOutput: JSON.parse(localStorage.getItem("NetworkValues")),
            arpOutput: JSON.parse(localStorage.getItem("arpValues")),
            addrOutput: JSON.parse(localStorage.getItem("addrValues")),
            fsckOutput: JSON.parse(localStorage.getItem("fsckValues")),
            vmstatOutput: JSON.parse(localStorage.getItem("vmstatValues")),
            freeOutput: JSON.parse(localStorage.getItem("freeValues")),
            serviceOutput: JSON.parse(localStorage.getItem("ServiceValues")),
            processOutput: JSON.parse(localStorage.getItem("ProcessValues")),
            topOutput: JSON.parse(localStorage.getItem("topValues")),
            PortOutput: JSON.parse(localStorage.getItem("PortValues"))
        }),
        success: function(result) {
            message.innerHTML = 'success!';
            console.log("数据已发送");
        },
        error: function(err) {
            message.innerHTML = 'failed!';
            console.error(err);
        }
    })
}
</script>

后端代码修正

1. 创建数据模型类

在AspNetCore.MariaDB.Models命名空间下创建与前端数据结构对应的模型(根据实际数据类型调整字段类型,示例用object兼容任意结构,建议替换为具体类型):

namespace AspNetCore.MariaDB.Models
{
    public class FilteredScripts
    {
        public object NetworkOutput { get; set; }
        public object arpOutput { get; set; }
        public object addrOutput { get; set; }
        public object fsckOutput { get; set; }
        public object vmstatOutput { get; set; }
        public object freeOutput { get; set; }
        public object serviceOutput { get; set; }
        public object processOutput { get; set; }
        public object topOutput { get; set; }
        public object PortOutput { get; set; }
    }
}

2. 修正控制器方法

删除错误的静态请求方法,改为接收前端JSON数据:

using AspNetCore.MariaDB.Models;
using Microsoft.AspNetCore.Mvc;
using System;

namespace AspNetCore.MariaDB.Controllers
{
    [ApiController] // 自动处理JSON绑定与模型验证
    [Route("api/[controller]")]
    public class ButtonController : ControllerBase // 继承ControllerBase更适合API场景
    {
        [HttpPost("FilterSubmit")]
        public IActionResult ButtonClickSub([FromBody] FilteredScripts requestData)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            // 读取数据并输出到控制台
            Console.WriteLine("收到NetworkOutput数据:");
            Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(requestData.NetworkOutput));
            // 其他字段同理处理...

            // 后续可添加过滤等业务逻辑

            return Ok("数据接收成功");
        }
    }
}

关键说明

  • [ApiController]特性自动启用JSON输入绑定、模型验证等API专属功能
  • [FromBody]标记告诉ASP.NET从请求体中解析JSON数据到模型对象
  • 前端必须指定contentType: "application/json"并使用JSON.stringify()序列化数据,否则后端无法正确解析

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:33:18