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

URL不带参数时Ajax POST请求失效问题排查求助

问题分析与解决方案

问题原因

你的控制器方法接收两个独立的string参数,但ASP.NET默认参数绑定规则为:简单类型参数(如string、int)优先从查询字符串或表单数据中取值。而当前Ajax请求是将JSON对象放在请求体中发送,框架无法自动将JSON对象拆解为两个独立的简单类型参数,因此会提示参数未传递。当你把参数拼在URL上时,参数处于查询字符串中,符合默认绑定规则,所以能正常工作。


解决方案

方案1:使用模型类接收请求体数据(推荐)

这是更规范、可维护的做法,适合多参数场景:

  1. 创建对应的数据模型类:
public class TestRequestModel
{
    public string TextBox1 { get; set; }
    public string TextBox2 { get; set; }
}
  1. 修改控制器方法,用模型类接收参数并添加[FromBody]特性(明确指定从请求体读取数据):
[HttpPost]
public async Task<ActionResult> TestAjax([FromBody] TestRequestModel model)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    Test testModel = new Test();
    testModel.TextBox1 = model.TextBox1;
    testModel.TextBox2 = model.TextBox2;

    _applicationDbContext.Test.Add(testModel);

    try
    {
        await _applicationDbContext.SaveChangesAsync();
        return Ok(new UserManagerResponse { Status = "Success", Message = "Successfully added test" });
    }
    catch (Exception ex)
    {
        return BadRequest(new UserManagerResponse { Status = "Failed", Message = ex.ToString() });
    }
}

Ajax代码无需修改,保持当前的JSON.stringify(data)和contentType: "application/json; charset=utf-8"配置即可。

方案2:动态接收请求体数据(不推荐多参数场景)

若不想创建模型类,可通过动态类型接收JSON对象:

[HttpPost]
public async Task<ActionResult> TestAjax([FromBody] dynamic requestData)
{
    string textBox1 = requestData.TextBox1;
    string textBox2 = requestData.TextBox2;

    // 后续业务逻辑与原代码一致
}

注意事项

确保Ajax请求中data对象的属性名(TextBox1、TextBox2)与模型类属性名完全一致(JSON序列化默认大小写敏感),当前代码已满足该要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:22:49