Asp MVC [Авторизировать], чтобы вернуть сообщение вместо Get - PullRequest
1 голос
/ 30 июля 2009

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

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

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

Итак, мой вопрос: Можно ли изменить приведенный ниже класс так, чтобы он возвращал переадресацию почты вместо переадресации 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");
    }
  }
}

Ответы [ 2 ]

1 голос
/ 30 июля 2009

Видимо проблема кажется решена удалением

[Acceptverbs(HttpVerbs.Post)]

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

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

:)

0 голосов
/ 23 августа 2011

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

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

<add key="loginUrl" value="~/Account/LogOn"/>
...