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 и перенаправить вашу страницу или что-то еще.

Другие вопросы по тегам