ASP.NET Core
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
25 个问题
我正在为一些非常奇怪的行为而苦苦挣扎。我的 TempData 在测试情况下工作正常。
public async Task<IActionResult> Test()
{
TempData["TEST"] = "HELLO";
return RedirectToAction("Test2");
}
[HttpGet]
public IActionResult Test2()
{
var tempData = TempData["TEST"]; //TempData is available here...
return View();
}
但是在我代码的另一部分中,重定向后 TempData 为 null:
[HttpGet]
public async Task<IActionResult> DoSomething(int? u, string? e, string? p, int? n)
{
if (u is null || e is null || n is null)
{
return RedirectToAction("Index", "Home");
}
else
{
var user = await _userManager.FindByIdAsync(u.ToString());
if (user is null)
{
return RedirectToAction("Index", "Home");
}
else if (user is not null && !user.Email!.Equals(e, StringComparison.CurrentCultureIgnoreCase))
{
return RedirectToAction("Index", "Home");
}
else if (user is not null && p is null)
{
TempData["UserID"] = user.Id.ToString();
return RedirectToAction("Preview", "Home", new { id = notification.UploadID });
}
}
}
public async Task<IActionResult> Preview(int id)
{
var userId = TempData["UserID"]; // This is always NULL!
if (userId is null)
{
return RedirectToAction("Index", "Home", new { area = "" });
}
else
{
// do stuff here.
}
}
令我感到困惑的是,TempData 和 Session 都在其他操作/视图中工作,但这个操作/视图却没有。 我刚刚发现了一个可能是罪魁祸首的差异。只有当我通过电子邮件中的链接加载网站时,才会发生问题。在网站加载之前,TempData 和 Session 似乎都不可用,然后单击另一个链接以点击另一个操作/视图。 如果我先加载网站,然后从电子邮件中获取链接并将其输入地址栏,则 TempData 和 Session 都可以工作。 知道这里发生了什么吗?
为什么会出现这个问题呢?该如何解决呢?
注意: 此问题总结整理于:TempData null after RedirectToAction。
你好,
我试图重现您的问题,cookie(会话 cookie/TempData Cookie)可能会被您的场景中的 samesite 策略阻止 您可以检查如何在 program.cs 中配置 TempData Cookie:
builder.Services.Configure<CookieTempDataProviderOptions>(options =>
{
options.Cookie.Name = "TEMPDATA";
//you have to avoid setting SameSiteMode.Strict here
options.Cookie.SameSite = SameSiteMode.Lax;
});
您可以在浏览器中检查cookie:
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。