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

C# Ajax POST请求404及参数传空问题技术求助

解决ASP.NET Core中AJAX POST参数为Null的问题

核心问题分析

当前参数为Null的根源在于两点:

  1. AJAX发送的data未序列化为标准JSON字符串,且数据结构与控制器接收的EmailInfo类不匹配
  2. 未正确处理application/json类型的请求体格式

具体解决方案

1. 修正AJAX请求的Data部分

将AJAX中的data改为序列化后的JSON字符串,确保请求体结构与EmailInfo类完全对齐:

$.ajax({
   type: 'post',
   url: '/Controllers/TestEmailSender/Send',
   contentType: 'application/json',
   data: JSON.stringify(inner) // 直接序列化inner对象,不要额外包裹在其他对象中
});

注:如果inner对象的属性和EmailInfo类的属性一一对应,直接序列化inner即可;若控制器需要接收的是包含EmailInfo属性的嵌套对象,才需要写成JSON.stringify({ EmailInfo: inner }),但根据当前控制器代码,直接传inner的序列化结果是正确的。

2. 确保EmailInfo类符合模型绑定要求

EmailInfo类必须是public访问级别,且属性需包含get和set方法,示例如下:

public class EmailInfo
{
    // 根据实际业务定义属性,需与前端inner对象的属性名完全一致
    public string Recipient { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

3. 验证请求的正确性

通过浏览器开发者工具(F12)的Network标签,检查两个关键项:

  • Payload:确认发送的JSON结构与EmailInfo类的属性匹配
  • Content-Type:确保请求头中的值为application/json; charset=utf-8

4. 可选:简化路由配置

当前控制器的[Route]特性和Startup中的默认路由可以统一,避免潜在冲突。例如移除控制器上的[Route]特性,仅依赖Startup中的默认路由:

// 移除控制器上的Route特性
public class TestEmailSenderController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Send([FromBody]EmailInfo EmailInfo)
    {
        // Action逻辑代码
    }
}

Startup中的路由配置保持现有内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:03:24