Вопрос

Я хотел бы использовать теги [Authorize(Роли ="Администратор")] в моих методах контроллера.

Если пользователь не является администратором, я хотел бы вернуть этого пользователя на свой экран входа в систему.Поведение по умолчанию при возврате пользователя на мою страницу входа в систему - перенаправить моего пользователя на "Учетная запись / Вход в систему", используя URL-адрес Get.

Проблема в том, что все подстраницы моего веб-сайта представляют собой частичные просмотры, обновляемые вызовами Ajax, включая экран моего входа в систему.

Итак, мой вопрос заключается в следующем: Можно ли изменить приведенный ниже класс, чтобы возвращать перенаправление post вместо перенаправления get?

public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
  override public void OnAuthorization(AuthorizationContext filterContext)
  {
    base.OnAuthorization(filterContext);
    // Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode.
    if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
    {
      filterContext.Result =  new RedirectResult("../Account/Login");
    }
  }
}
Это было полезно?

Решение

По-видимому, проблема, по-видимому, решена путем удаления

[Acceptverbs(HttpVerbs.Post)]

атрибут в методе входа контроллера моей учетной записи.

Таким образом, нам даже не нужно переопределять атрибут AuthorizeAttribute

:)

Другие советы

Я нашел решение в Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication ()

Нужно только добавить appSetting с именем " loginUrl " чтобы указать действие входа в систему:

<add key="loginUrl" value="~/Account/LogOn"/>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top