2016-06-08 45 views
0

對不起,我的英語不好,但我試圖讓自己變得更好。 現在確定 我有一個內容/索引操作和視圖。我有一個表單提交評論與添加評論/評論部分和partialview頁面。現在我使用過濾器來檢查插入時間的用戶。任何用戶都允許在一分鐘內插入評論。現在,如果用戶插入第一條評論,我在OnActionExecuted方法的緩存中保存一分鐘,並且如果該用戶再次插入另一條評論,則檢查緩存中的該用戶緩存時間小於一分鐘或編號爲 如果小於一分鐘,我希望在ErrorController/IndexAction中重定向用戶... 但在Child Action中不起作用。例如,因爲Commnet/AddComment操作在Content/Index Page中調用...我認爲這個方法是子操作,並且不在Error控制器中重定向。 但我在內容/索引中使用此過濾器時,可以重定向到錯誤控制器。 我的過濾器:當我們在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; 
    } 


} 

和第一我叫父控制器。內容/索引

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

和加載我IndexPage。現在我加載評論/ addcomment行動。

[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

我重定向代碼之間沒有什麼不同與您的代碼。這兩個代碼都工作正常。但我的問題是這個代碼只是一個主要的行動,而不是一個後期行動或partialviewresual行動。 –

相關問題