在本地主机上使用asp.net core 2.1身份时TempData丢失

时间:2018-10-05 22:47:28

标签: c# asp.net-identity 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

知道我想念什么吗?

2 个答案:

答案 0 :(得分:3)

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

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();


}

感谢@Tony Morris

答案 1 :(得分:0)

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

我通过遵循official documentation来解决此问题,它说:

  

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

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

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