2017-04-20 1 views
0

내 작업 여기 : "Web.Config"의 특정 키를 기반으로 특정 "Controller/Action"특정 URL을 제거하고 싶습니다. 사용자 지정 필터를 만들려고했습니다. 속성,하지만 난이 "OnActionExecuting이 무한 루프 원인"또 다른 문제를 발견하고, 실제로 나는이 솔루션 "ASP.NET MVC 3 OnActionExecuting causes infinite loop"으로 확신했다,하지만, 난 여전히 해결책을 찾을 수 없습니다사용자 지정 특성 | | Web.Config의 특정 URL에 대한 특정 URL 액세스 방지

의 Web.config :.

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

나의 컨트롤러 : 로그인 사용자의 승인 여부를 확인한 다음이 사용자가이 컨트롤러에 적합한 지 확인하십시오.

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

내 Filteration 클래스 : 키가 "거짓 false"잘 때

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

그것은이 찾을 수없는 페이지로 리디렉션, 작동하지만 키에 해당하는 경우, 그것은로 리디렉션 내 컨트롤러가 있지만 매번 필터 속성을 찾습니다.

이 오류를 해결할 방법이 있는지 알고 싶거나 기본 작업에 대한 다른 해결책을 알고 싶습니다.

답변

0

키가 true 일 때 동일한 동작으로 리디렉션되는 동일한 원인으로 인해 동일한 동작으로 리디렉션되는 속성을 다시 호출하면 루프가 무한 루프가되므로 로직을 변경하면 아무 것도 할 필요가 없습니다. 아래의 기본 함수로 넘어가려면 코드의 전체 예제를 참조하십시오. 시도 해봐.

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); 
    } 
} 
관련 문제