首页 > 解决方案 > 在回调操作期间使用时,TempData 的行为不符合预期

问题描述

我有一个 ASP.NET Core 2 Web 应用程序。它实际上是 Identity Server 4 的实现,但我认为这与我的问题无关。我有一个控制器,其操作表示来自外部 OAuth 服务的回调。我已经剥离了所有的处理程序逻辑,只剩下这个:

[HttpGet]
[AllowAnonymous]
[Route("challenge/callback")]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
    TempData["Test"] = "hello world";

    return RedirectToAction("Index", "App", new { path = "oauth-register" });
}

你可以看到我正在设置一些诱人的数据并重定向。它重定向到的视图只是迭代TempData集合并呈现每个键/值。

该应用程序使用 的默认实现TempData,因此没有注册额外的提供程序或任何东西。

我现在执行以下 2 个操作:

  1. 我在浏览器中访问此质询/回调URL,并确认我已按预期重定向,并且我的临时数据“hello world”已写入屏幕。
  2. 我现在按照我的应用程序的登录路径,重定向到外部提供程序,登录并重定向回我的应用程序。此处调试器通过上述操作并再次执行相同的重定向。但是这次TempData集合是空的,目标视图没有写出任何内容。

我无法理解这一点,因为就我的应用程序而言,这两个操作肯定是相同的。它们都是对同一端点的 GET 请求。是否TempData根据引用者或其他特定于请求的变量表现不同?

我希望有人能把我从这里的痛苦中解救出来!

标签: c#asp.net-mvcasp.net-core

解决方案


推荐阅读