Asp.Net core Tempdata and redirecttoaction not working
Another scenario where this type of error happened to me was upgrading from AspNetCore 2.2 to 3.0 - and, where I had AzureAD as an OpenID Connect provider - when it would try to process the AzureAD cookie, it threw an exception the TempDataProvider and complained that it could not serialize a type of Int64. This fixed:
services.AddMvc()
.AddNewtonsoftJson(options =>
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver());
https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#newtonsoftjson-jsonnet-support
TempData
uses Session
, which itself uses IDistributedCache
. IDistributedCache
doesn't have the capability to accept objects or to serialize objects. As a result, you need to do this yourself, i.e.:
TempData["PopupMessages"] = JsonConvert.SerializeObject(_popupMessages);
Then, of course, after redirecting, you'll need to deserialize it back into the object you need:
ViewData["PopupMessages"] = JsonConvert.DeserializeObject<List<PopupMessage>>(TempData["PopupMessages"]);