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

小型内部.NET Core 3.1 AJAX Web应用跨请求维护状态的方法

最理想的状态保留方案:Session状态

针对你这个内部工具的场景,Session状态是最适合的选择,理由如下:

  • 适配使用场景:少数用户、无身份验证需求,ASP.NET Core的Session默认用匿名Cookie维持,不需要用户登录,只要浏览器支持Cookie就能用,服务器端开销极低
  • 轻松处理复杂状态:能直接存储包含int、string、List/Dictionary的对象,只要对象可序列化即可,不用自己折腾客户端的序列化逻辑
  • 贴合连续AJAX调用流程:Session绑定用户会话,从OnGet加载页面到连续5次AJAX调用的整个流程中,状态都会在服务器端稳定保留,不用每次请求都把状态来回传递,省心高效

其他可选方案的不足

  • 客户端存储(LocalStorage/SessionStorage):虽然能存状态,但需要手动序列化/反序列化对象,且状态放在客户端,哪怕无安全问题,也不如服务器端维护稳妥;另外每次AJAX请求无需携带状态数据,能减少请求体积
  • TempData:TempData默认仅保留到下一次请求,要连续使用5次得每次手动调用Keep()或Peek(),操作繁琐,远不如Session一存到底方便
  • 隐藏字段/请求传参:每次AJAX都要把状态序列化后传递,服务器处理完再返回更新后的状态,对象复杂时序列化容易出问题,还会增加请求开销

Session的简单实现步骤

  1. 配置Session:在Program.cs里添加Session服务,设置过期时间(比如10分钟足够覆盖连续调用流程):
builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(10);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});
// 启用Session中间件
app.UseSession();
  1. 在PageModel里注入ISession,通过序列化方式存取状态对象:
private readonly ISession _session;
public YourPageModel(ISession session)
{
    _session = session;
}

// 存储状态
var yourState = new YourStateObject { Count = 1, Name = "test", Items = new List<string>() };
var json = JsonSerializer.Serialize(yourState);
_session.SetString("YourStateKey", json);

// 获取并更新状态
var json = _session.GetString("YourStateKey");
if (!string.IsNullOrEmpty(json))
{
    var yourState = JsonSerializer.Deserialize<YourStateObject>(json);
    // 执行状态更新逻辑
    yourState.Count++;
    // 将更新后的状态存回Session
    _session.SetString("YourStateKey", JsonSerializer.Serialize(yourState));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:33:34