Неожиданный LogOff пользователя
Есть сайт на ASP MVC 4 под .NET 3.5. И у пользователей есть необходимость загружать туда файлы. Логиним их через стандартные средства, в конфиге всё предельно просто:
<authentication mode="Forms">
<forms loginUrl="~/SignIn" timeout="2000" />
</authentication>
Проблема заключается в следующем: регулярно после завершения загрузки файла и его обработки на сервере (запись в БД, переименование, сброс на диск - всё проходит успешно) вместо той страницы, куда я хочу перебросить пользователя, меня перебрасывает на SignIn
Подробности. Файл грузится следующим образом:
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult SignModel(HttpPostedFileBase modelFile, string urlHash)
Дальше стена кода и:
TempData["StartDownload"] = "/Download/" + Path.GetFileNameWithoutExtension(file) + ".mdl";
String url = Url.Action("IndexWithDownload", "FrontendModels") + urlHash;
return new RedirectResult(url);
На urlHash ругаться бесполезно - что он есть, что его нет. Скажу больше - проблема возникает на моделях до 1 Мб где-то один раз из 10-20, на файлах за метр (не ровно, примерно!) стабильно 9 из 10.
Дальше код метода IndexWithDownload (скажу сразу, убрать заголовок Refresh тоже не помогло). Методы разнесены в разные контроллеры.
[Authorize]
public virtual ActionResult IndexWithDownload()
{
if (TempData["StartDownload"] != null)
{
ViewData["StartDownload"] = TempData["StartDownload"];
this.HttpContext.Response.AppendHeader("Refresh", "5; " + ViewData["StartDownload"]);
}
return View("Index");
}
Ну и вместо Index я получаю SignIn.
В отладчике браузера пишется:
IndexWithDownload с кодом 302, а следующей строкой
SignIn?ReturnUrl=%2fFrontendModels%2fIndexWithDownload с кодом 200
Хотя вернуться должна как раз вьюшка Index контроллера FrontendModels. Грубо говоря, та же страничка, с которой мы вызывали SignModel
И всё. И я смотрю на страничку логина красными глазами. Идеи закончились. Может у вас есть мысли? Если что упустил - только скажите.
Самое печальное, что под студией проблемы нет. Только на уже загруженном сайте, что усложняет отладку в разы.
UPDATE: возвращение другой странички, редирект на Index, преобразование метода в void и добавление AllowAnonymous, изменение максимального размера файла в web.config не помогло. Проверил файлы 900Кб и 1.1Мб - разницы никакой, на обоих logout 8/10 раз. Я в отчаянии.