При развертывании в веб-ферме (в основном 2 блока Windows Server 2016) приведенный ниже код не может прочитать данные из TempData.Последовательность событий следующая: страница UserInfo помещается в POST, TempData устанавливается, а затем перенаправляется в GET UserInfo.В GET TempData не может быть прочитано.
[HttpPost]
public IActionResult UserInfo(Model model) {
TempData["Model"] = JsonConvert.SerializeObject(model);
return RedirectToAction("UserInfo");
}
[HttpGet]
public IActionResult UserInfo() {
string serialized = (string)TempData["Model"];
if (serialized != null) {
var model = JsonConvert.DeserializeObject<Model>(serialized);
return View(model);
} else {
// nothing here redirect home
return RedirectToAction("Landing");
}
}
Я получаю следующую ошибку в журнале std (но не вызывает исключения в моем коде):
warn: Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider[3]
The temp data cookie .AspNetCore.Mvc.CookieTempDataProvider could not be loaded.
System.Security.Cryptography.CryptographicException: The key {0dd9c024-af79-407b-9820-db7f094975f9} was not found in the key ring.
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
at Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider.LoadTempData(HttpContext context)
PS Следует отметить, что этот код работает в инстансах IIS, не относящихся к веб-ферме, и на виртуальном хостинге Asure.