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

ASP.NET Core Razor:AJAX请求如何同时传递QueryString与FromBody参数

解决Razor Pages中AJAX POST同时传递[FromQuery]和[FromBody]参数的问题

第一步:修正后台代码的语法错误

你的后台方法签名存在多余的语法冗余,会导致编译失败,需删除无效的[FromQuery],片段:

public class MyNamespaceModel : PageModel {
    public async Task<IActionResult> OnPostDisplay([FromQuery] string param1, [FromQuery] string param2, [FromBody] ClientData ClientRequestData)
    {            
        // 使用param1、param2和ClientRequestData.param3执行操作
        return Page();
    }
}
public class ClientRequestData { public string param3 {get;set;}}

第二步:构造正确的AJAX请求URL

你之前的URL构造错误在于出现了两个?分隔符,导致后台无法正确解析查询参数。正确的做法是将handler=Display与原有查询参数用&拼接在同一查询字符串中。

修正后的JS代码:

var input_json = {};        
input_json['param3'] = "carpe diem";
let searchParams = new URLSearchParams(window.location.search);
var _url = null;

if (searchParams.has('param1') && searchParams.has('param2')) {
    // 将handler参数加入现有查询参数集合
    searchParams.set('handler', 'Display');
    // 生成符合规范的查询字符串
    _url = '?' + searchParams.toString();
}
console.log(_url); // 输出示例: ?param1=Hello&param2=World&handler=Display

$.ajax({
    type: 'POST',            
    url: _url,            
    data: JSON.stringify(input_json),
    contentType: 'application/json',
    dataType: "json",
    beforeSend: function (xhr) {
        xhr.setRequestHeader("XSRF-TOKEN",
            $('input:hidden[name="__RequestVerificationToken"]').val());
    },
    success: function (response) {
        console.log(response); // response已为JSON对象,无需重复序列化
    },
    error: function (error) {
        console.log("Error: " + error);
    }
});

关键说明:

  1. URL格式规范:HTTP查询字符串仅允许一个起始符?,后续参数统一用&分隔。使用URLSearchParams.toString()方法可自动完成参数拼接与编码,避免手动拼接的格式错误。
  2. [FromBody]参数传递:你的AJAX代码中设置contentType: 'application/json'并序列化数据发送,完全符合[FromBody]的接收要求,无需调整。
  3. XSRF令牌验证:Razor Pages的POST请求必须携带XSRF令牌,你的代码已正确实现该逻辑,保持即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:36:32