C# Ajax POST请求404及参数传空问题技术求助
解决ASP.NET Core中AJAX POST参数为Null的问题
核心问题分析
当前参数为Null的根源在于两点:
- AJAX发送的
data未序列化为标准JSON字符串,且数据结构与控制器接收的EmailInfo类不匹配 - 未正确处理
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
相关产品推荐
相关产品推荐

