首页 > 解决方案 > 如何修复“本地主机指示您太多次”。MVC 中的错误

问题描述

我有门户网站,当用户登录系统时。我正在检查电子邮件和电话号码。如果数据库中不存在。我想重定向到“ProfilView”页面并完成电子邮件和电话字段。但是我收到了这个错误“localhost 指示你的次数太多了。”

这个方法 FilterAttribute 和我把 BaseController

这是我的 BaseController,我有 Attribute

[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);
        }
    }

标签: c#asp.net-mvc

解决方案


您的代码导致递归重定向。因此,从过滤器中的重定向逻辑中排除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);
        }
    }

推荐阅读