Временные данные asp.net core 2.1 пусты с помощью redirecttoaction - PullRequest
0 голосов
/ 16 октября 2018

У меня есть проект asp.net core 2.1, и я пытаюсь использовать TempData с RedirectToAction, но он всегда нулевой (без ошибок)

Вот мой метод ConfigureServices

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        //services pour l'authentification
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
        {
            options.LoginPath = "/Login";
        });


        //services pour session
        services.AddSession(options => {
            options.IdleTimeout = TimeSpan.FromMinutes(20);
        });

        //configuer port https
        services.AddHttpsRedirection(options => options.HttpsPort = 443);

        Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

        ManageDI(services);

        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddSessionStateTempDataProvider();
    }

У меня есть"app.UseSession ();"в моем методе Configure

и вот мой код

[HttpGet]
    public async Task< IActionResult> ResetPassword(string query)
    {
        TempData["test"]= "test";
        return RedirectToAction(nameof(Login));
    }

    [HttpGet]
    public IActionResult Login(string returnUrl = null)
    {
        var b = TempData["test"];
        //b is always null when calling ResetPassword action

        var model = new Models.Account.LoginModel{
                ReturnUrl = returnUrl
        };

        return View(model);
    }

Что я забыл, пожалуйста?

Спасибо

1 Ответ

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

Не совсем понятно, в чем проблема, основанная на предоставленном вами коде, но, поскольку вы упоминаете, что в вашем действии ResetPassword оно отсутствует в вашем действии Login, я предполагаю, что вы не правильносохраняя значение.

TempData это просто временные данные.Как только к нему обращаются, он удаляется.Поэтому, когда вы устанавливаете b здесь с его значением, это все - оно ушло.Если затем вы попытаетесь получить к нему доступ в другом действии позже или даже просто в представлении, которое возвращает это действие, оно будет иметь значение null.

Если вам нужно получить значение, но также сохранить его для дальнейшего использования, вынужно использовать TempData.Peek:

var b = TempData.Peek("test");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...