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

.NET Core使用Ajax调用带参数OnGet方法传参失败解决

问题根因

参数接收失败是三个常见错误叠加导致的:

  1. Handler方法名和路由不匹配:Razor Pages中如果访问路径带Refund段/指定handler为Refund,对应方法名必须是OnGetRefund,默认无后缀的OnGet只能匹配不带handler参数的页面根路径GET请求。
  2. GET请求配置错误:GET请求没有请求体,第一种写法加了contentType: "application/json"配置、第二种写法用JSON.stringify包裹参数,都是给带请求体的POST/PUT请求用的写法,会导致参数无法被正确解析到URL查询串中。
  3. 手动拼接URL容易出错:手动拼接查询串时如果参数包含特殊字符(比如&、空格、中文),会直接截断参数,导致绑定失败。
修复方案

1. 修正后端方法

如果要匹配Refund这个Handler,把方法名改成符合Razor Pages约定的命名即可,参数不需要额外加绑定特性:

// 对应handler=Refund的GET请求
public void OnGetRefund(string id, string refundReason, int amount)
{           
    // 你的业务逻辑
}

如果你不想用命名Handler,就保留OnGet方法名,后续Ajax的URL里去掉Refund相关的路径/参数即可。

2. 修正Ajax写法

直接用jQuery自动拼接查询参数的能力,不要手动拼URL、不要加JSON序列化、不要给GET请求设置JSON的contentType:

$.ajax({
    // 用相对路径更通用,不要写死localhost端口,?handler=Refund对应OnGetRefund方法
    url: "/Transactions?handler=Refund",
    type: "GET",
    // 直接传对象,jQuery会自动编码拼接成查询串
    data: {
        id: '20a63762-a6ab-4edb-852b-fd247e9dc247',
        refundReason: refundReason,
        amount: amount
    },
    dataType: "json",
    success: function (data) {
        // 处理返回结果
    }
});
额外注意事项
  • 确保传入的amount值可以被转成整数,传非数字字符串会导致int类型参数绑定失败。
  • 不要给GET请求的参数加[FromBody]特性,.NET Core默认不会从GET请求的请求体中读取数据做绑定。
  • 如果你的项目自定义了Razor Pages路由让Handler出现在路径段(比如/Transactions/Refund的形式),确认路由模板中已经预留了handler的位置,否则统一用?handler=xxx的查询串写法兼容性最好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:18:25