Когда пользователь попадает на определенный маршрут, другой появляется в моем приложении ASP.MVC - PullRequest
0 голосов
/ 28 февраля 2019

Мое приложение показывает это странное поведение.Допустим, что ссылка на него выглядит так:

http://<serverhere>

Но когда пользователи используют эту ссылку, появляется другая:

http://<serverhere>/Access/Login/?login=<somevalue>

А так как у меня этого нетМаршрут сопоставлен, он выдает ошибку «Ресурс не найден».

Вот мой конфигурационный маршрут:

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

            routes.MapRoute(
                name: "Access",
                url: "Access/",
                defaults: new { controller = "Access", action = "Index" }
            );

            routes.MapRoute(
                name: "AccessIndex",
                url: "Access/Index",
                defaults: new { controller = "Access", action = "Index" }
            );

            routes.MapRoute(
                name: "Main",
                url: "Main/",
                defaults: new { controller = "Main", action = "Index" }
            );

            routes.MapRoute(
                name: "MainIndex",
                url: "Main/Index",
                defaults: new { controller = "Main", action = "Index" }
            );

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

        }

А вот мой контроллер доступа:

public class AccessController: BaseController
    {
        public ActionResult Index()
        {
            LimparSession();
            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("Login", "Access", new { @login = login });
            }
        }

        private void LimparSession()
        {
            Session.Clear();
        }

        private RedirectToRouteResult Login(string login)
        {
            //Get info and then redirect

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

Что я могу сделать, чтобы предотвратить такое поведение?

1 Ответ

0 голосов
/ 28 февраля 2019

Похоже, вы должны улучшить свою логику доступа.

Acesso acesso = repositorio.RecuperarAcesso(login, false);

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

Логика этого простого условного блока заключается в том, что если у пользователя есть доступ к сайту, ему показывается страница "Пользователь не найден", в противном случае -быть перенаправленным на страницу входа.Если вы достаточно хорошо знакомы с тем, как работает MVC, вы можете видеть, что маршрут Access/Login/?login=<somevalue> вызывает метод действия Login контроллера Access, предоставляя значение для аргумента login, которое является именно тем, что вы 'мы дали указание сделать это в блоке else условного оператора.

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