Отображение полезного сообщения при перенаправлении на страницу входа FormsAuthentication с ASP.NET MVC - PullRequest
2 голосов
/ 29 мая 2011

Я хочу создать пользовательский AuthorizeAttribute, включающий свойство Message.Проблема в том, что моя FormsAuthentication перенаправляет на указанный loginUrl.Как это представление может получить доступ к свойству сообщения атрибута?

например, у меня есть это действие, используя мой пользовательский AuthorizeAttribute

[Authorize(Message="You must be logged in to see user settings.")]
public ActionResult Settings()
{
    return View();
}

, который перенаправляется в / Account / LogOn (благодаряFormsAuthentication настроек в web.config), если пользователь не вошел в систему. Я хочу показать «Вы должны войти в систему, чтобы увидеть настройки пользователя» в представлении входа в систему, чтобы пользователь знал почему они былиперенаправлен на страницу входа в систему

Ответы [ 2 ]

5 голосов
/ 29 мая 2011

Один из вариантов - поместить значение вашего свойства Message в TempData в методе HandleUnautherizeRequest вашего пользовательского AuthorizeAttribute. Затем в действии LogOn на контроллере учетной записи возьмите значение из TempData и поместите его в ViewBag или вашу модель, чтобы у View был доступ к нему.

AuthorizeAttribute:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{            
    base.HandleUnauthorizedRequest(filterContext);
    filterContext.Controller.TempData["MessageFromMyAttribute"] = this.Message;
}

AccountController

public ActionResult LogOn()
{
    ViewBag.AttributeMessage = TempData["MessageFromMyAttribute"];
    return View();
}

Поскольку MVC выполняет редирект за кулисами, значение в TempData будет сохраняться при перенаправлении.

2 голосов
/ 29 мая 2011

Выполните следующие действия:

  1. Создайте свой собственный атрибут, который наследуется от AuthorizeAttribute
  2. В своем фильтре добавьте сообщение в TempData
  3. В действии, которое вы перенаправляете, когда требуется вход в систему, получите сообщение от TempData и передайте его в представление.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...