Проблемы, когда пользователь получает доступ к некоторым маршрутам в моем приложении MVC - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть приложение MVC, мой основной маршрут которого определяется следующим образом:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Acesso", action = "Index", id = UrlParameter.Optional }
            );

В моем приложении есть два основных контроллера: Access и Main.Когда пользователь входит в приложение, оно обращается к Access следующим образом:

public ActionResult Index()
{
            RepositorioAcesso repositorio = new RepositorioAcesso();
            string login = System.Web.HttpContext.Current.User.Identity.Name.Split(new[] { "\\" }, StringSplitOptions.None)[1].ToLower();
            Acesso acesso = repositorio.RecuperarAcesso(login, false);

            if (acesso == null)
            {
                ViewBag.mensagem = "User Not Found.";
                return View();
            }
            else
            {
                return RedirectToAction("Logando", "Acesso", new { @login = login });
            }
        }

А вот метод Logando:

public RedirectToRouteResult Logando(string login)
        {
            RepositorioAcesso repositorio = new RepositorioAcesso();
            RepositorioAgendamentosCliente repositorioAgendamentos = new RepositorioAgendamentosCliente();
            Acesso acesso = repositorio.RecuperarAcesso(login, true);

            Session.Timeout = 900;
            Session["Login"] = acesso.Login;
            Session["LoginCompleto"] = login.ToUpper();
            Session["Nome"] = acesso.Nome;
            Session["TipoMenu"] = ObterLayout(acesso);
            Session["PaginaPrincipal"] = ObterPaginaPrincipal(acesso);
            Session["Loja"] = acesso.Loja.LojaBase;
            Session["ADABAS"] = acesso.Loja.LojaBase;
            Session["Acesso"] = acesso;

            return RedirectToAction("Index", "Principal");
        }

Я сделал это так, потому что пользователи хотели войти, используяих учетная запись windows.Но если пользователь недавно работал в компании, он / она не может появиться в наших записях, потому что информация не была обновлена.Итак, я проверяю, есть ли они в нашей базе данных в первую очередь.Если это так, то я получаю их информацию.

Иногда пользователи получают доступ к приложению, которое идет напрямую по маршруту Main / Index, что приводит к ошибке, поскольку о них не будет информации о сеансе.Итак, я сделал это:

public ActionResult Index()
        {
            Session["lista"] = new List<Alta>();
            Session["cliente"] = new Cliente();
            Session["Configuracao"] = new ConfiguracaoLoja();
            Acesso acesso = GetAcessoSession();

            if (acesso == null)
            {
               return RedirectToAction("Index", "Acesso");
            }

           //rest of the code here    
}

Это работает, но не всегда, так как я получаю некоторые ошибки, которые просят меня включить пользовательские ошибки на моем web.config.(Я все еще должен проверить эти ошибки, так как я изменил свой веб-конфиг 10 минут назад).

Есть ли более эффективный способ проверить наличие информации о сеансе о пользователе и перенаправить ее при необходимости?Я использую asp.mvc 5 кстати.

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