2016-06-08 6 views
0

실례합니다. 영어 실력이 좋지 않아요.하지만 더 나아 지려고합니다. 지금 확인 콘텐츠/색인 작업 및보기가 있습니다. addcomment/Comment partial 및 partialview 페이지와 함께 의견을 제출할 수있는 양식이 있습니다. 이제는 사용자가 체크인 확인을 위해 필터에서 사용합니다. 모든 사용자는 1 분 내에 코멘트를 삽입 할 수 있습니다. 이제 사용자가 첫 번째 주석을 삽입하면 OnActionExecuted 메서드에서 캐시에 1 분을 저장하고이 사용자가 다른 주석을 삽입하면 해당 사용자 캐시 시간에 대해 캐시를 체크인합니다. 1 분 미만 또는1 분 미만인 경우 ErrorController/IndexAction ... 에서 사용자를 리디렉션하지만 하위 작업에서는 작동하지 않습니다. 예를 들어 콘텐츠/색인 페이지에서 Commnet/AddComment 작업 호출 ...이 메서드는 자식 작업 및 오류 컨트롤러에서 리디렉션하지 생각합니다. 하지만 Content/Index ..에서이 필터를 사용하면 오류 컨트롤러로 리디렉션 될 수 있습니다. 내 필터 :우리가 OnActionExecuting에있을 때 다른 컨트롤러로 리디렉션하는 방법

public class ValidateSpamFilterAttribute : ActionFilterAttribute 
{ 

    public int Duration { get; set; } 
    public bool IsAddress { get; set; } 
    private string SecurityKey { get; set; } 
    public ValidateSpamFilterAttribute(int duration, bool isAddress) 
    { 
     Duration = duration; 
     IsAddress = isAddress; 

    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     SecurityKey = CreateKey(); 
     var objReadCache = HttpContext.Current.Cache; 
     if (objReadCache.Get(SecurityKey) != null) 
     { 

      filterContext.Result = new RedirectToRouteResult(
        new System.Web.Routing.RouteValueDictionary(new { controller = "Error", action = "Index", area = "", Exception = "بازه زمانی ثبت شما رعایت نشده است", ErrorCode = System.Net.HttpStatusCode.BadRequest, Handler = "Controller" } 
        ) 
        ); 
      filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext); 


      base.OnActionExecuting(filterContext); 

     } 

    } 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     SecurityKey = CreateKey(); 
     var SecurityValue = SecurityKey; 
     var SecurityTime = DateTime.Now.AddMinutes(Duration); 
     var SecurityExp = System.Web.Caching.Cache.NoSlidingExpiration; 
     var SecurityPri = System.Web.Caching.CacheItemPriority.Normal; 
     HttpContext.Current.Cache.Add(SecurityKey, SecurityValue, null, SecurityTime, SecurityExp, SecurityPri, null); 
     base.OnActionExecuted(filterContext); 
    } 
    private string CreateKey() 
    { 
     var IP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? HttpContext.Current.Request.UserHostAddress; 
     var Info = (this.IsAddress) ? (HttpContext.Current.Request.RawUrl + HttpContext.Current.Request.QueryString) : ""; 
     var UniqueString = String.Concat(IP, Info); 
     var SecurityValue = string.Join("", System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.ASCII.GetBytes(UniqueString)).Select(s => s.ToString("x2"))); 

     return SecurityValue; 
    } 


} 

먼저 내가 부모 컨트롤러 .Content/인덱스

 public ActionResult Index(int id, string title) 
    { 
     //anything 
    } 

전화 내 IndexPage을로드합니다. 이제 내가 코멘트/덧셈 액션을로드합니다.

[ValidateSpamFilter(duration: 10, isAddress: true)] 
    // HttpPost Method For Submit Form . you can add comment by this method . 
    public ActionResult AddComment(CommentAddDTO Comments) 
    { 
     //addcomment .... 
    } 

어쨌든 내 코드

 filterContext.Result = new RedirectToRouteResult(
       new System.Web.Routing.RouteValueDictionary(new { controller = "Error", action = "Index", area = "", Exception = "بازه زمانی ثبت شما رعایت نشده است", ErrorCode = System.Net.HttpStatusCode.BadRequest, Handler = "Controller" } 
       ) 
       ); 
     filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext); 

나를 위해 작동하지 그리고 난 아이 액션이 필터를 사용하면 컨트롤러 오류에 리디렉션 할 수 없습니다.

답변

0

내가 다른 컨트롤러 onActionExecuting로 리디렉션에 대한 코드 아래 사용하고 있습니다 :

filterContext.Result = 새로운 RedirectToRouteResult ("기본", 새로운 System.Web.Routing.RouteValueDictionary {{ "컨트롤러", "오류 "}, { "action ","Index "}}}); 이 도움이

희망 ..

+0

코드와 내 리디렉션 코드 사이에 다른. 두 코드 모두 잘 작동합니다. 하지만 내 문제는이 코드는 그냥 주요 작업을 작동하고 게시물 작업 또는 partialviewresualt 작업을 작동하지 않습니다. –