.NET Core 6 Razor Pages中AJAX传参至Post方法参数为空问题求助
解决.NET Core 6 Razor Pages中AJAX Post传递多参数为null的问题
问题根源
- 多个
[FromBody]标记错误:ASP.NET Core的请求体只能被解析一次,你在OnPostCalculate里给两个参数都加了[FromBody],这会导致参数无法正确绑定,最终出现null值。 - 仓库方法滥用
[FromBody]:GetContribution是业务逻辑方法,不是HTTP请求入口方法,[FromBody]仅适用于接收请求体的Action/接口方法,加在这里完全无效,反而会干扰参数传递。
解决方案
1. 创建参数封装模型
定义一个类来封装前端传递的两个参数,让框架能正确解析请求体:
public class ContributionRequest { public string Range1 { get; set; } public string Range2 { get; set; } }
2. 修正Razor Page的Post方法
用上面的模型类替代多个[FromBody]参数,仅保留一个[FromBody]标记:
public IActionResult OnPostCalculate([FromBody] ContributionRequest request) { // 先做参数校验,避免空值异常 if (request == null || string.IsNullOrEmpty(request.Range1) || string.IsNullOrEmpty(request.Range2)) { return new JsonResult("无效参数"); } var monthly_credit = employeeRepository.GetContribution(request.Range1, request.Range2); foreach (var credit in monthly_credit) { Message = $"SSS Contribution = {credit}"; } return new JsonResult(Message); }
3. 移除仓库方法的多余标记
GetContribution作为内部业务方法,直接用普通参数即可:
public IEnumerable<SSS> GetContribution(string range1, string range2) { // 增加空值校验,避免Parse报错 if (string.IsNullOrEmpty(range1) || string.IsNullOrEmpty(range2)) { throw new ArgumentNullException("区间参数不能为空"); } double parsedRange1 = double.Parse(range1); double parsedRange2 = double.Parse(range2); // SQL code that returns values from tables }
4. 前端代码确认(无需修改)
你的AJAX代码已经正确使用JSON.stringify和contentType: 'application/json;charset=utf-8',只需确保页面存在__RequestVerificationToken隐藏字段(Razor Pages默认会生成,只要页面有表单或调用过Html.AntiForgeryToken()即可)。
验证
修改后重新运行项目,触发AJAX请求,后端即可正确接收参数,不会再出现null异常。
内容的提问来源于stack exchange,提问作者N. Tanaka
相关产品推荐
相关产品推荐

