首页 > 解决方案 > 在 localhost 上使用 asp.net core 2.1 身份时,TempData 丢失

问题描述

安装新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://docs.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

知道我错过了什么吗?

标签: c#asp.net-identityasp.net-core-2.1tempdata

解决方案


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

https://docs.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();


}

谢谢@托尼莫里斯


推荐阅读