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

使用C#无法获取jQuery提交的POST表单数据该如何解决?

问题解决:jQuery提交数组到C#页面无法获取数据

问题原因

你用$.post提交{ messages: conversation }时,jQuery默认会把数组序列化为表单编码格式(就是你看到的messages%5b0%5d%5brole%5d=user...这种键值对),而非整体的JSON字符串。后端直接取Request.Form["messages"]会返回null,因为表单里没有名为messages的单个字段,只有一堆以messages[xxx]命名的拆分字段。

解决方法

方法一:前端改为提交JSON字符串(推荐)

修改请求方式,把数组转成JSON字符串提交,并指定contentType为application/json:

$('#AskMe').click(function () {
    var question = $("#meQuestion").val();

    if (question != "") {
        conversation.push({ "role": "user", "content": question });
        isLoading(1);
        $.ajax({
            url: "ajax/chat/response_chat.aspx",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ messages: conversation }),
            success: function (data) {
                isLoading(0);
                refreshQuota();
            }
        });
    } else {
        // 处理空输入逻辑
    }
});

后端接收时,读取请求体的JSON并反序列化:

using System.IO;
using Newtonsoft.Json;

// 定义强类型类匹配数据结构
public class ChatMessage
{
    public string role { get; set; }
    public string content { get; set; }
}

public class ChatRequest
{
    public List<ChatMessage> messages { get; set; }
}

// 在页面后台代码中读取解析
string jsonBody = new StreamReader(Request.InputStream).ReadToEnd();
var chatRequest = JsonConvert.DeserializeObject<ChatRequest>(jsonBody);
var messages = chatRequest.messages; // 这里就是前端提交的conversation数组

方法二:后端直接解析表单编码的数组

如果不想修改前端,可以通过遍历表单键来拼接数组:

using System.Collections.Generic;

public class ChatMessage
{
    public string role { get; set; }
    public string content { get; set; }
}

// 解析表单数据
List<ChatMessage> messages = new List<ChatMessage>();
int index = 0;
while (true)
{
    string roleKey = $"messages[{index}][role]";
    string contentKey = $"messages[{index}][content]";
    // 判断当前索引的字段是否存在
    if (!Request.Form.AllKeys.Contains(roleKey) || !Request.Form.AllKeys.Contains(contentKey))
    {
        break;
    }
    // 添加到列表
    messages.Add(new ChatMessage
    {
        role = Request.Form[roleKey],
        content = Request.Form[contentKey]
    });
    index++;
}

原代码无效原因

你尝试直接获取Request.Form["messages"],但这个字段根本不存在——表单里的键都是messages[0][role]、messages[1][content]这种拆分后的名称,所以Request.Form["messages"]返回null,后续的JSON解析自然失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:30:33