У меня есть приложение 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 кстати.