asp.net核心2.1 tempdata空,带有redirecttoaction

时间:2018-10-16 15:55:49

标签: asp.net-core-mvc asp.net-core-2.1

我有一个asp.net core 2.1项目,我尝试将TempData与RedirectToAction一起使用,但它始终为null(无错误)

这是我的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);
    }

我忘记了什么?

谢谢

2 个答案:

答案 0 :(得分:1)

根据您提供的代码,问题尚不完全清楚,但由于您提到ResetPassword动作中Login动作中该问题为空,因此我假设您是'没有正确地保留该值。

TempData就是这样:临时数据。一旦被访问,它将被删除。因此,当您在此处将b设置为其值时,就这样了-它不见了。如果您以后再尝试在其他操作中访问它,甚至尝试在该操作返回的视图中访问它,则该参数现在为空。

如果需要获取值,但也要保留以备后用,则需要使用TempData.Peek

var b = TempData.Peek("test");

答案 1 :(得分:0)

使用

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

您启用GDPR(通用数据保护法规) 因此,只要用户不接受您的cookie,您将无法在站点中设置cookie。这会使TempData为空