Вызов сеанса перед выполнением любого действия контроллера в MVC - PullRequest
0 голосов
/ 16 июля 2010

У меня есть эта проверка аутентификации в моем файле global.asax в вызове Session_OnStart ():

if (Session["Authenticated"] == null)
        {
            Response.Redirect("~/Login.aspx");
        }

Этот вид аутентификации сеанса тесно связан во всех наших веб-приложениях, поэтому я должен использовать его следующим образомпуть.Этот global.asax находится в более старом проекте Webforms, в котором находится мой проект MVC. Поэтому по этой причине я считаю, что он позволяет мне получить доступ к моему действию контроллера, например, http://localhost/controller/action напрямую без заполнения моей аутентификации сеанса, т.е.перенаправление.Я добавил этот бит кода в КАЖДОЕ действие контроллера, чтобы обойти это, но есть ли способ установить это где-нибудь глобально (не в global.asax), чтобы мне нужно было вызывать его только один раз для всех действий контроллера?Спасибо.

1 Ответ

6 голосов
/ 16 июля 2010

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

public abstract class BaseController : ControllerBase

затем вы можете использовать метод инициализации в новом BaseContoller для выполнения общей логики. т.е.

[edit] - изменено на OnActionExecuting, а не Initialize. Это не самое элегантное место для этого, так как мы находимся на пороге вызываемого представления. однако это отправная точка.

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // you should be able to get session stuff here!!
    base.OnActionExecuting(filterContext);
}

и в каждом контроллере:

public class AnotherNormalController : BaseController
...