powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Почему не работает Base Controller?
14 сообщений из 14, страница 1 из 1
Почему не работает Base Controller?
    #39243597
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Есть две задачи:
1) в сессии хранить объект пользователь, чтобы за его свойствами не делать запросы в БД. (Пользователей на сайте довольно много);
2) посредством базового контроллера отлавливать ошибки всех контроллеров

Имеется asp mvc 5 VS 2015

Что делаю:

Базовый контроллер:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
namespace WEB.Controllers
{
    public class BaseController : Controller
    {


        private BusinessLayer.User.User _currentUser;
        public BusinessLayer.User.User CurrentUser
        {
            get
            {
                if (!Request.IsAuthenticated) return null;

                if (_currentUser != null) return _currentUser;

                //try to get it form Session first, if its not there -> create it and put in the session
                if (Session["CurrentUser"] == null)
                {
                    _currentUser = new UserManager().UserDetailed(User.Identity.Name);
                    
                    Session["CurrentUser"] = _currentUser;
                    return _currentUser;
                }
                else //set it to the local var for the multiple references in the calling code and return
                {
                    _currentUser = (BusinessLayer.User.User)Session["CurrentUser"];
                    return _currentUser;
                }
            }

            set
            {
                _currentUser = value;
                Session["CurrentUser"] = _currentUser;
            }
        }



    }
}



В Global.asax ловлю ошибки все:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
protected void Application_Error(object sender, EventArgs e)
        {
            BusinessLayer.Extensions.Mailer mailerManager = new BusinessLayer.Extensions.Mailer();

            HttpContext ctx = HttpContext.Current;
            Exception ex = ctx.Server.GetLastError();
            ctx.Response.Clear();

            RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext;
            IController controller = new  WEB.Controllers.BaseController();  // Тут можно использовать любой контроллер, например тот что используется в качестве базового типа
            var context = new ControllerContext(rc, (ControllerBase)controller);

            var viewResult = new ViewResult();

            var httpException = ex as HttpException;
            if (httpException != null)
            {

               


                switch (httpException.GetHttpCode())
                {


                    case 404:
......



Далее любой контроллер, например:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
...

namespace WEB.Controllers
{

    
    public class EventsController : BaseController
    {


 public ActionResult UserStream()
        {
            if (User.Identity.IsAuthenticated)
            {
                BusinessLayer.User.UserManager UM = new BusinessLayer.User.UserManager();
                ViewBag.EventsMain = UM.UserStream(CurrentUser.Id, 20);
                return View("UserStream");
            }            
            else { return View("UserStreamNA"); }            
        }
......



CurrentUser - NULL. Ставлю точку останова в базовом контролере, но туда не заходит процесс и естественно CurrentUser не инициализирован....

Что я упустил?
Спасибо.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39243796
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)
Код: c#
1.
if (!Request.IsAuthenticated) return null; 

я тогда не пойму где тогда set-ишь. если не зараген то вернуть null, а как тогда зарегаться и прокинуть в сессию?

2) сессия зло - кеш лучше , ты итак уже юзаешь iprincipal и чего его не расширил просто + кеш раз боишься что там бд помрет, хотя все ти преждевременные оптимизации такое зло.

3) отлов ошибок зачем так то какой профит? в глобале просто пришло - залогировал и не важно откуда + еще фильтр на ошибки что в глобал не попало и все
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39243836
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

спасибо за отклик.

!Request.IsAuthenticated - это же если не авторизирован...

первые две проверки прошли и если в сессии инфы нет, то сетим...


ты итак уже юзаешь iprincipal и чего его не расширил просто
---
не знал, сейчас погуглю и сюда


просто пришло - залогировал и не важно откуда + еще фильтр на ошибки что в глобал не попало и все
---
понял, спасибо
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39243837
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
логика самого BaseController верна, я не могу понять почему я в него не захожу, я же наследовался от него ( public class EventsController : BaseController)
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39243963
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnickлогика самого BaseController верна, я не могу понять почему я в него не захожу, я же наследовался от него ( public class EventsController : BaseController)
У Вас есть BaseController со свойством CurrentUser, но я что-то не вижу где вы используете setter для него в наследнике, потому и не будет заходить. Приведенный код неполный? Добавьте конструктор без параметров для BaseController и поставьте точку останова, чтобы убедиться, что BaseController вызывается.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244077
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

все, разобрался наконец то...


тут я обращаюсь к публичному свойству базового контроллера ViewBag.EventsMain = UM.UserStream(CurrentUser.Id, 20);

CurrentUser - обращение.

Ну и в базовом контроллере если нет в сессии устанавливаю:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  //try to get it form Session first, if its not there -> create it and put in the session
                if (Session["CurrentUser"] == null)
                {
                    _currentUser = new UserManager().UserDetailedByName(User.Identity.Name);
                    
                    Session["CurrentUser"] = _currentUser;
                    return _currentUser;
                }



я этот код выпилил с проекта с simpleMemberShip а в новом проекте используется новая авторизация, с этим накладка была.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244078
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

2) сессия зло
----


а можешь пж по пункта... почему? На старом проекте используется.... все норм... несколько раз было что юзеров выбивало с админки.... но так и не знаю сессия виновна или нет.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244079
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnick, но это было обращение к getter'у, но не setter'у. Кода для последнего у Вас я не увидел.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244080
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тем более в кеш у меня есть что помещать... и он не резиновый )
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244081
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnick, и сессия и кэш необходимо использовать исходя из конкретной задачи. Сессия тоже полезна, когда нужно хранить что-то ровно в течении жизни сессии в браузере, однако не нужно пихать тюда все что попало, т.е. разумное использование.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244082
Фотография Sputnick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronSputnick, но это было обращение к getter'у, но не setter'у. Кода для последнего у Вас я не увидел.

выходит он благополучно инициируется в геттере...

в сеттере эта строка - _currentUser = value; - для меня загадка.... , что за value
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244186
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SputnickAxeleronSputnick, но это было обращение к getter'у, но не setter'у. Кода для последнего у Вас я не увидел.

выходит он благополучно инициируется в геттере...

в сеттере эта строка - _currentUser = value; - для меня загадка.... , что за value
value - то что передается в типе CurrentUser.
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244194
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sputnickа можешь пж по пункта... почему? На старом проекте используется.... все норм... несколько раз было что юзеров выбивало с админки.... но так и не знаю сессия виновна или нет.

ну если коротко то stateless, а так ты сам мож погуглить почему такие мысли возникают. Выбивало потому что у тебя сессия сбрасывалось, а причину этого ну разные могут быть.

Sputnickтем более в кеш у меня есть что помещать... и он не резиновый )

а у тебя что кеш лежит отдельно от аппликейшена? если нет то о чем разговор. и там так мало памяти? тогда зачем кешировать
...
Рейтинг: 0 / 0
Почему не работает Base Controller?
    #39244276
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SputnickAxeleronSputnick, но это было обращение к getter'у, но не setter'у. Кода для последнего у Вас я не увидел.

выходит он благополучно инициируется в геттере...

в сеттере эта строка - _currentUser = value; - для меня загадка.... , что за value
А для меня загадка, как можно с отсутствием знания базовых понятий языка что то пытаться делать на нем.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Почему не работает Base Controller?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]