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

ASP.NET Core MVC相同HttpPost方法在ControllerBase调用时参数为null问题

问题根因

该问题由**[ApiController]特性的默认参数绑定规则差异**引发,具体逻辑如下:

  • 继承自Controller的主控制器通常作为MVC页面控制器使用,默认未添加[ApiController]特性,参数绑定会按优先级依次从路由数据、查询字符串、POST表单体中匹配参数名,所以前端通过$.post提交的表单格式SessionID参数可以正常被识别。
  • 继承自ControllerBase的SessionDataController大概率添加了[ApiController]特性(ASP.NET Core Web API控制器的默认配置),该特性对字符串、值类型等简单类型参数的默认绑定源为查询字符串(URL参数),不会主动读取POST表单体中的字段。你前端代码是将SessionID放在POST的表单体中提交,没有拼接到URL查询参数里,所以后端拿到的参数为null。

Postman测试正常的原因

你使用Postman测试时,大概率是直接将SessionID作为查询参数拼接到了请求URL末尾,符合[ApiController]的默认绑定规则,因此可以正常拿到参数。

修复方案

任选其中一种即可:

  • 给SessionDataController中GetSessionInfo方法的参数添加[FromForm]特性,强制从POST表单体绑定参数:
[HttpPost]
public async Task<SessionInfo> GetSessionInfo([FromForm] string SessionID)
  • 调整前端请求逻辑,将SessionID拼接到请求URL的查询参数中:
var url = '@Url.Action("GetSessionInfo", "SessionData")?SessionID=' + selectvalue.toString();
$.post(url, function (data) {
    $('#txtDateFr').val(data.returnstartdate);
    $('#txtDateTo').val(data.returnenddate);
},'json')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:06