ASP.NET MVC Сообщение Ajax для действия, требующее аутентификации, возвращает представление входа в систему по истечении времени сеанса пользователя
Я использую Ajax.BeginForm для создания формы, которая выполнит обратную передачу ajax для определенного действия контроллера, а затем представление ответа будет вставлено в UpdateTargetId.
using (Ajax.BeginForm("Save", null,
new { userId = Model.UserId },
new AjaxOptions { UpdateTargetId = "UserForm" },
new { name = "SaveForm", id = "SaveForm" }))
{
[HTML SAVE BUTTON]
}
Все прекрасно работает, за исключением случаев, когда время сеанса пользователей истекло, а затем они перенаправляются обратно на страницу входа. Затем страница входа возвращается из вызова Ajax из-за атрибута Authorize, и HTML-код загружается в UpdateTargetId, и поэтому я получаю HTML-страницу входа в систему на странице профиля пользователя (с идентификатором цели). Мое действие контроллера выглядит так:
[Authorize]
public ActionResult Save(Int32 UserId)
{
//code to save user
return View("UserInfoControl", m);
}
Как я могу решить эту проблему?
ОБНОВЛЕНИЕ (2011-10-20): нашел этот пост от Фила Хаака об этой конкретной проблеме - http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx. Я еще не получил возможности переварить или реализовать его решение.
1 ответ
Я думаю, что вы можете решить проблему авторизации изнутри действия. Сначала удалите [Authorize], используйте этот код:
public ActionResult Save(Int32 UserId)
{
if (!User.Identity.IsAuthenticated)
{
throw new Exception();
}
//code to save user
return View("UserInfoControl", m);
}
Затем вы можете поместить условие OnFailure в ваши AjaxOptions и перенаправить вашу страницу или что-то еще.