用户访问我的MVC应用程序中的某些路由时出现问题

时间:2019-02-27 18:15:00

标签: c# asp.net-mvc

我有一个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分钟前更改了Web配置,我仍然必须检查这些错误)。

是否有更有效的方法来检查是否存在有关用户的会话信息,并在需要时重定向它们?我正在使用asp.mvc 5 btw。

0 个答案:

没有答案