Как мне узнать имя текущего контроллера / действия / представления? - PullRequest
0 голосов
/ 01 декабря 2008

У меня есть код, который я добавляю в код основной страницы. Эта главная страница - мой основной макет, и цель кода - проверить, вошел ли пользователь в систему, и предпринять соответствующие действия в зависимости от того, есть они или нет. Мне было бы интересно услышать альтернативные методы о том, как подойти к этому, но я делаю это сейчас так, поскольку это прямой порт из другой инфраструктуры MVC, и я хочу изменить как можно меньше кода или потока во время порта.

Мой реальный вопрос: как определить имя текущего контроллера, действие и представление, которые выполняются? Часть логики в коде зависит от знания имени текущей страницы. Чтобы быть конкретным, он говорит (псевдокод):

if (!isLoggedIn && !isLoginPage)
    Redirect(loginPage);

Итак, мне нужно знать, нахожусь ли я на странице входа, чтобы избежать бесконечного цикла перенаправления. В настоящее время я достигаю этого, изучая URL-адрес, чтобы увидеть, содержит ли он строку / Login /, но это глупо, и я бы предпочел использовать более надежный и интеллектуальный метод.

Ответы [ 3 ]

4 голосов
/ 01 декабря 2008

Лучшей проверкой того, вошел ли пользователь в систему (при условии, что вы используете FormsAuth), является User.Identity.IsAuthenticated, который доступен из Views или Controller.

Звучит так, будто вам нужно подключить сюда Auth форм - он обрабатывает все для вас, включая перенаправления. Убедитесь, что в вашем файле web.config это добавлено:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login"/>
</authentication>

Это говорит вашему приложению, что вы используете формы авторизации. Затем используйте ActionFilter для методов, которые вы хотите заблокировать:

/// <summary>
/// Default view
/// </summary>
/// <returns></returns>
[Authorize(Roles="Administrator")]
public ActionResult Index()
{
    return View();
}

Это будет работать с аутентификацией форм, чтобы удостовериться, что пользователь идентифицирован. Он также автоматически добавит текущий URL-адрес как перенаправление и проигнорирует представление входа в систему - все это автоматически и сделано для вас.

2 голосов
/ 01 декабря 2008

Посмотрите на атрибут Authorization для действий контроллеров и контроллеров. Это должно избавить вас от каких-либо действий в коде главной страницы.

1 голос
/ 03 декабря 2008

Обратите внимание, что существует несколько способов передачи данных на главные страницы, обозначенные здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...