ASP.NET MVC Сообщение Ajax для действия, требующего аутентификации, возвращает представление входа в систему по истечении времени сеанса пользователя - PullRequest
2 голосов
/ 08 октября 2009

Я использую 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 Ответ

0 голосов
/ 09 октября 2009

Я думаю, что вы можете решить проблему авторизации изнутри действия. Сначала удалите [Authorize], используйте этот код:

public ActionResult Save(Int32 UserId)
{
    if (!User.Identity.IsAuthenticated) 
    { 
        throw new Exception();
    }
    //code to save user
    return View("UserInfoControl", m);

}

Затем вы можете поместить условие OnFailure в ваши AjaxOptions и перенаправить вашу страницу или что-то в этом роде.

...