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

使用TempData.Peek方法时出现431错误的技术求助

问题原因

431错误是请求头字段过大导致的。你当前使用CookieTempDataProvider,TempData的内容会被存储在浏览器Cookie中,而多数浏览器对单个Cookie的大小上限为4KB左右。当VMClient视图模型序列化后的JSON体积超过这个限制时,就会触发该错误。

解决方案

方案1:改用Session存储TempData(推荐)

你已经配置了Session服务,只需将TempData的存储提供者切换为SessionTempDataProvider,数据会存在服务器端的Session中,不受Cookie大小限制:

修改Program.cs中的配置:

// 替换原CookieTempDataProvider配置
builder.Services.AddSingleton<ITempDataProvider, SessionTempDataProvider>();
builder.Services.AddSession();

// 其他中间件...

app.UseSession();

方案2:调整Cookie大小限制(不推荐)

如果必须使用CookieTempDataProvider,可以尝试增大Cookie允许的大小,但要注意浏览器本身的Cookie上限,超过后依然会失效:

builder.Services.AddCookieTempDataProvider(options =>
{
    // 设置Cookie最大大小(单位:字节),示例为40KB
    options.Cookie.MaxSize = 40960;
});
builder.Services.AddSession();

// 其他中间件...

app.UseSession();

方案3:优化存储的数据

避免将完整的VMClient对象存入TempData,只存储必要的标识信息(如ID),后续需要完整数据时再从数据库或其他数据源获取:

GET请求中修改存储逻辑:

// 仅存入关键标识
TempData["ClientId"] = vMClient.Id;
return View(vMClient);

视图中获取后补充完整数据:

@model VMClient
@{
    var clientId = TempData.Peek("ClientId");
    // 根据clientId从数据源查询完整VMClient对象
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:54:55