在本地主机上使用核心 2.1 标识时 asp.net 临时数据丢失



安装了新asp.net core 2.1 identity(使用RCL的那个(来使用它。 脚手架登录、注册和个人资料页面。检查个人资料页面:

Areas.Identity.Pages.Account.Manage.Index.cshtml.cs

我遇到了这个属性:

[TempData]
public string StatusMessage { get; set; }

这是在更新配置文件页面时设置的:

StatusMessage = "Your profile has been updated";
return RedirectToPage();

有趣的是,在本地运行时不会显示该消息。更有趣的是,当我将其发布到 Azure 时,它可以工作。

我的Startup.cs确实有官方文档指示的配置:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#tempdata

其中说:

.AddSessionStateTempDataProvider()

app.UseSession();

以下是完整的源代码:

https://github.com/kedzior-io/dotnetpwa/tree/model-status-message-is-empty-on-redirect

知道我错过了什么吗?

所以看起来官方文档不好:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#tempdata

文档:

public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();
services.AddSession();
}

应该是:

public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddSession(); // That should be BEFORE .AddMvc()
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();

}

谢谢@Tony莫里斯

我使用的是 aspnet core 2.2,在我的情况下,按照 Artur 的答案建议更改顺序不起作用。

我按照官方文档解决了这个问题,其中说:

会话状态 Cookie 不是必需的。禁用跟踪时,会话状态不起作用。以下代码使会话 Cookie 必不可少:

services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});

拥有此套装可以解决问题,无论它是放在services.AddMvc()之前还是之后

我网站的 Cookie 策略意味着 TempData Cookie 未被保存。所以我添加了代码来将cookie标记为"必需":

services.AddControllersWithViews()
.AddCookieTempDataProvider(t => t.Cookie.IsEssential = true);

相关内容

  • 没有找到相关文章

最新更新