Как исправить 'localhost направил вас слишком много раз.'ошибка в MVC - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть сайт портала и при входе пользователя в систему.Я проверяю электронную почту и номер телефона.Если не существует в базе данных.Я хочу перенаправить на страницу «ProfilView» и заполнил поле «Электронная почта и телефон».Но я получил эту ошибку «localhost направил вас слишком много раз».

Этот метод FilterAttribute и я поместили поверх BaseController

Это мой BaseController, и у меня есть атрибут

[ContactInfo]
public class BaseController : Controller

, и это мой атрибут

public class ContactInfoAttribute : ActionFilterAttribute   {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext == null || filterContext.HttpContext == null || filterContext.HttpContext.Request == null)
                return;

            var workContext = EngineContext.Current.Resolve<IWorkContext>();
            var customer = workContext.CurrentUser;

            if (customer != null)
            {
                if (customer.PhoneNumber == null || customer.Email == null)
                {

                    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();

                    redirectTargetDictionary.Add("action", "ProfileView");
                    redirectTargetDictionary.Add("controller", "Account");

                    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);

                }
            }

            base.OnActionExecuting(filterContext);
        }
    }

1 Ответ

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

Ваш код вызывает рекурсивные перенаправления.Поэтому исключите действие ProfileView из логики перенаправления в фильтре.

 public class ContactInfoAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext == null || filterContext.HttpContext == null || filterContext.HttpContext.Request == null ||
                (filterContext.ActionDescriptor.ActionName == "ProfileView" && filterContext.ActionDescriptor.ControllerDescriptor.ControllerName == "Account"))
                return;

            var workContext = EngineContext.Current.Resolve<IWorkContext>();
            var customer = workContext.CurrentUser;

            if (customer != null)
            {
                if (customer.PhoneNumber == null || customer.Email == null)
                {

                    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();

                    redirectTargetDictionary.Add("action", "ProfileView");
                    redirectTargetDictionary.Add("controller", "Account");

                    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);

                }
            }

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