【问题标题】:Custom Attribute || Prevent Accessing specific URL baseld on a key in Web.Config自定义属性 ||防止基于 Web.Config 中的键访问特定 URL
【发布时间】:2017-09-16 20:17:35
【问题描述】:

我的任务:我想根据“Web.Config”中的特定键消除特定的 url “Controller/Action” 我尝试制作自定义过滤器属性,但我发现“OnActionExecuting 导致无限循环”的另一个问题 ",实际上我被这个解决方案 "ASP.NET MVC 3 OnActionExecuting causes infinite loop" 说服了,但我仍然找不到解决方案。

Web.Config:

<add key="Delegation" value="true" />

我的控制器:我检查登录用户是否被授权,然后检查此用户是否有资格使用此控制器。

[MyAuthorize("EdgeEngineGroups")]
[Edge.Models.FilterAttribute]

我的过滤类:

public class FilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string Delegation = "";
        Delegation = System.Configuration.ConfigurationManager.AppSettings["Delegation"].ToString();
        if (string.IsNullOrEmpty(Delegation) != null)
        {
            if(Delegation.ToLower() == "true")
            {
                var controllerName = filterContext.RouteData.Values["controller"];
                var actionName = filterContext.RouteData.Values["action"];

                    filterContext.Result = new RedirectToRouteResult(
                        new RouteValueDictionary{{ "controller", controllerName },
                                      { "action", actionName }

                                     });
            }
            else
            {
                filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary{{ "controller", "AccessDenied" },
                                      { "action", "NotFound" }

                                     });

            }
        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary{{ "controller", "AccessDenied" },
                                      { "action", "NotFound" }

                                     });

        }
        base.OnActionExecuting(filterContext);
    }
}

当key为“false”时它可以正常工作,它会重定向到未找到的页面,但是当key为true时,它会重定向到我的控制器但每次都会找到filter属性。

我想知道是否有解决此错误的方法,或主要任务的其他解决方案。

【问题讨论】:

    标签: asp.net-mvc custom-attributes


    【解决方案1】:

    它发生的原因是当键为真时,你重定向到相同的动作,当相同的动作调用时,属性将再次调用,它将无限循环,所以改变逻辑不需要做任何事情当它为真让它传递给下面的基本函数是您的代码的完整示例。试试看。

    public class FilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string Delegation = "";
            Delegation = System.Configuration.ConfigurationManager.AppSettings["Delegation"].ToString();
                if(string.IsNullOrEmpty(Delegation) || Delegation.ToLower() == "false")
                {
                    filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary{{ "controller", "AccessDenied" },
                                      { "action", "NotFound" }
    
                                     });
    
                }
            base.OnActionExecuting(filterContext);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多