在 Asp.Net Core 中使用 TempData 时无法重定向到操作
Not able to redirect to action when using TempData in Asp.Net Core
我正试图在 Asp.Net Core 中实现一个简单的事情。这在 Asp.Net Mvc 中没什么大不了的。我有这样的操作方法
public async Task<IActionResult> Create([Bind("Id,FirstName,LastName,Email,PhoneNo")] Customer customer)
{
if (ModelState.IsValid)
{
_context.Add(customer);
await _context.SaveChangesAsync();
TempData["CustomerDetails"] = customer;
return RedirectToAction("Registered");
}
return View(customer);
}
public IActionResult Registered()
{
Customer customer = (Customer)TempData["CustomerDetails"];
return View(customer);
}
起初我假设 TempData 默认工作,但后来意识到必须添加和配置它。我在启动时添加了 ITempDataProvider。官方文档好像是说这样应该就够了。它没有用。然后我还配置它使用 Session
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddSession(
options => options.IdleTimeout= TimeSpan.FromMinutes(30)
);
services.AddMvc();
services.AddSingleton<ITempDataProvider,CookieTempDataProvider>();
}
我在写app.UseMvc之前在Startup的Configure方法中与Session相关的下面一行
app.UseSession();
这仍然无效。发生的事情是我没有因为使用 TempData 而得到任何异常,这是我以前错过一些配置时得到的,但现在创建操作方法无法重定向到注册方法。 Create 方法完成所有工作,但 RedirectToAction 无效。如果我删除将客户详细信息分配给 TempData 的行,RedirectToAction 会成功重定向到该操作方法。但是在这种情况下,注册的操作方法显然无法访问 CustomerDetails。我错过了什么?
@赢了。你是对的。阅读本文免责声明后,我意识到序列化,每当您想在 Asp.net Core 中使用 TempData 时都需要反序列化。
https://andrewlock.net/post-redirect-get-using-tempdata-in-asp-net-core/
我首先尝试使用 BinaryFormatter,但发现它也已从 .NET Core 中删除。然后我使用NewtonSoft.Json进行序列化和反序列化。
TempData["CustomerDetails"] = JsonConvert.SerializeObject(customer);
public IActionResult Registered()
{
Customer customer = JsonConvert.DeserializeObject<Customer>(TempData["CustomerDetails"].ToString());
return View(customer);
}
这是我们现在必须做的额外工作,但现在看起来就是这样。
我正试图在 Asp.Net Core 中实现一个简单的事情。这在 Asp.Net Mvc 中没什么大不了的。我有这样的操作方法
public async Task<IActionResult> Create([Bind("Id,FirstName,LastName,Email,PhoneNo")] Customer customer)
{
if (ModelState.IsValid)
{
_context.Add(customer);
await _context.SaveChangesAsync();
TempData["CustomerDetails"] = customer;
return RedirectToAction("Registered");
}
return View(customer);
}
public IActionResult Registered()
{
Customer customer = (Customer)TempData["CustomerDetails"];
return View(customer);
}
起初我假设 TempData 默认工作,但后来意识到必须添加和配置它。我在启动时添加了 ITempDataProvider。官方文档好像是说这样应该就够了。它没有用。然后我还配置它使用 Session
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddSession(
options => options.IdleTimeout= TimeSpan.FromMinutes(30)
);
services.AddMvc();
services.AddSingleton<ITempDataProvider,CookieTempDataProvider>();
}
我在写app.UseMvc之前在Startup的Configure方法中与Session相关的下面一行
app.UseSession();
这仍然无效。发生的事情是我没有因为使用 TempData 而得到任何异常,这是我以前错过一些配置时得到的,但现在创建操作方法无法重定向到注册方法。 Create 方法完成所有工作,但 RedirectToAction 无效。如果我删除将客户详细信息分配给 TempData 的行,RedirectToAction 会成功重定向到该操作方法。但是在这种情况下,注册的操作方法显然无法访问 CustomerDetails。我错过了什么?
@赢了。你是对的。阅读本文免责声明后,我意识到序列化,每当您想在 Asp.net Core 中使用 TempData 时都需要反序列化。
https://andrewlock.net/post-redirect-get-using-tempdata-in-asp-net-core/
我首先尝试使用 BinaryFormatter,但发现它也已从 .NET Core 中删除。然后我使用NewtonSoft.Json进行序列化和反序列化。
TempData["CustomerDetails"] = JsonConvert.SerializeObject(customer);
public IActionResult Registered()
{
Customer customer = JsonConvert.DeserializeObject<Customer>(TempData["CustomerDetails"].ToString());
return View(customer);
}
这是我们现在必须做的额外工作,但现在看起来就是这样。