TempData теряется при использовании идентичности ядра 2.1 asp.net на локальном хосте - PullRequest
0 голосов
/ 06 октября 2018

Установлен новый 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 голосов
/ 19 мая 2019

Я использую ядро ​​aspnet 2.2, и в моем случае изменение порядка, предложенное ответом Артура, не сработало.

Я решил эту проблему, следуя официальной документации , в которой говорится:

Файлы cookie состояния сеанса не обязательны.Состояние сеанса не работает, когда отслеживание отключено.Следующий код делает сессионные файлы cookie необходимыми:

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

Наличие этого набора решает проблему независимо от того, находится ли он до или после services.AddMvc()

0 голосов
/ 06 октября 2018

Похоже, что официальные документы не годятся:

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


}

Спасибо @ Тони Моррис

...