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

ASP.NET Core 3.1 PRG模式下如何隐藏OnGet入参并实现跨方法传参

解决Razor Pages PRG模式下隐藏参数传递的问题
  • ViewData的生命周期仅覆盖当前请求,RedirectToPage触发的是302跨请求跳转,新请求下ViewData会被重置,因此拿不到值是正常现象,不适合跨请求传参。
  • TempData本身默认是基于加密Cookie存储(ASP.NET Core 2.0+默认配置),数据不会暴露在URL中,你看到URL里的input_string参数,是前端提交逻辑或者重定向逻辑的问题,和TempData本身无关。常见的两种错误场景:
    1. 前端表单/JS提交时用了GET方式,或者手动把参数拼接在了跳转的目标URL上
    2. 调用RedirectToPage时手动传入了路由参数,比如写了return RedirectToPage("GetData", new { input_string = xxx }),这会自动把参数拼到URL上

正确实现方案

1. 修正后端代码

你当前贴的TempData核心逻辑是对的,只需要根据场景做小优化即可:

public async Task<IActionResult> OnPostData(string input_JSON)        
{
    // TempData存储的内容会在读取后自动清除,如果需要保留供后续请求用可以加TempData.Keep("InputJSON")
    TempData["InputJSON"] = input_JSON;
    // 这里不要加额外的路由参数,直接跳转页面即可
    return RedirectToPage("GetData");
}

public async Task<IActionResult> OnGetGetData()
{
    string inputJson = TempData["InputJSON"] as string;
    if (string.IsNullOrEmpty(inputJson))
    {
        // 可添加异常处理,拦截非法直接访问GetData页面的请求
        return BadRequest("参数丢失");
    }
    // 后续业务处理逻辑
}

如果你的JSON字符串长度超过4KB(Cookie默认大小限制),可以改用基于Session的TempData,只需要在Program.cs里加配置:

builder.Services.AddSession();
builder.Services.AddControllersWithViews().AddSessionStateTempDataProvider();
// 中间件要放在路由之后、授权之前
app.UseSession();

2. 修正前端逻辑

如果是JS触发提交后打开新窗口的场景,不要手动把参数拼到GetData的URL上,示例逻辑:

// 正确逻辑:先POST提交数据到OnPostData,成功后直接打开GetData页面即可,不需要拼接参数
fetch('/你的当前页面名?handler=Data', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
    },
    body: 'input_JSON=' + encodeURIComponent(你的JSON字符串)
}).then(res => {
    if (res.ok) {
        // 直接打开GetData页面,不要带任何参数
        window.open('/GetData');
    }
})

排查你的JS代码,去掉所有给/GetData路径拼接input_string参数的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:15:00