2014-10-14 3 views
0

В основном я хочу проверить, действительно ли сеанс действителен для каждого запроса GET и POST в моем приложении, однако я не хочу продолжать копировать и вставлять тот же код в каждом методе действий, я думал об использовании базового контроллера, чтобы я мог наследовать использование или статический класс вспомогательного контроллера (если это можно сделать?). Являются ли эти способы лучшим (или даже правильным) подходом?Использование того же метода RedirectToAction в ActionMethods в ASP.NET MVC

Пример кода

[HttpGet] 
    [ValidateInput(false)] 
    public ActionResult SimpleSearch() 
    { 
     // I want to run this code of every ActionResult for a GET AND POST 
     if (!SessionStaticClass.IsUserLoggedIn()) 
     { 
      return RedirectToAction("Login, Login"); 
     } 
    } 

Благодаря

+0

Какую версию MVC вы используете? – elolos

+0

5 - ну последнее, что я считаю – user3428422

+1

Если вы используете сеанс для хранения регистрационной информации, вы делаете это очень неправильно, и ваш сайт очень небезопасен ... –

ответ

2

Вы можете использовать фильтр действий:

public class NotLoggedInFilter : FilterAttribute, IResultFilter 
{ 
    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     if (!SessionStaticClass.IsUserLoggedIn()) 
     { 
      filterContext.Result = new RedirectToAction("Login, Login"); 
     } 
    } 
} 

Вы можете украсить контроллеры или действия с атрибутом, или даже запустить его для все действия, добавив его в глобальную коллекцию фильтров.

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{  
    filters.Add(new NotLoggedInFilter()); 
} 

Однако, вы можете захотеть взглянуть на фильтрах аутентификации в качестве способа обработки аутентификации пользователя вместо использования SessionStaticClass класса. Хороший обзор типов фильтров в MVC можно найти here.

Смежные вопросы