【发布时间】:2020-01-29 15:38:17
【问题描述】:
在Controller中,我通过TempData将错误集合保存到cookies
var messages = new List<Message>();
...
TempData.Put("Errors", messages);
TempData.Put 是一种扩展方法
public static class TempDataExtensions
{
public static void Put<T>(this ITempDataDictionary tempData, string key, T value) where T : class
{
tempData[key] = JsonConvert.SerializeObject(value);
}
public static T Get<T>(this ITempDataDictionary tempData, string key) where T : class
{
tempData.TryGetValue(key, out object o);
return o == null ? null : JsonConvert.DeserializeObject<T>((string)o);
}
}
加载 HTML 时,我看到了
并创建了几个 cookie(Chrome 开发者工具 > 应用程序 > 存储 > Cookie)
我认为的问题是,Cookie 的总大小在某处达到了某个 Cookie 大小限制。
所以我有两个问题:
是否可以更改 cookie 大小限制(例如在 web.config 中)?
TempData 可以使用会话而不是 cookie 吗?
我尝试了第二种方法,如果我更改了 startup.cs 文件
\\ ConfigureServices method
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();
services.AddSession();
\\ Configure method
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
TempData 还在使用 Cookie,我是不是忘记了某些设置?
【问题讨论】:
-
如您所说,通常如果我们需要在TempData中存储大量数据,我们可以使用session provider来代替。此外,启用基于会话的 TempData 提供程序后,请尝试使用浏览器 F12 开发者工具清除现有 cookie,然后浏览您的站点以检查其是否正常工作。
-
你好韩,我怎么能确定,那个会话提供者有效? cookie 仍在创建中,因此我发布了这个问题。
-
是的,您可以使用基于会话的临时数据。
标签: session asp.net-core cookies tempdata