问题的根本原因是 ASP.NET Core 核心不会自动处理一些会话数据,这包括用户的身份验证数据。因此,在重定向到其他 Razor 页面时,未能保留用户身份验证数据。
解决此问题的一种方法是使用 TempData。TempData 允许您将跨请求存储和检索数据。您可以将用户身份验证数据存储在 TempData 对象中,然后在 Razor 视图中检索它。
以下是一些示例代码,展示了如何在 ASP.NET Core MVC 中使用 TempData:
// Configure services in Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... app.UseSession(); // ... }
// Example login code in your controller
public IActionResult Login(string returnUrl)
{
// ...
if (/* Authentication success /)
{
var claims = new List
TempData["UserIdentity"] = principal; // Store user identity in TempData
return RedirectToAction("ActionName", "ControllerName"); // Redirect to another Razor view
}
// ...
}
// Example usage in another Razor view @{ var user = TempData["UserIdentity"] as ClaimsPrincipal; // Retrieve user identity from TempData if (user != null) { /* Use user identity data */ } }