我有一个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);
}
我忘记了什么?
谢谢
答案 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为空