실례합니다. 영어 실력이 좋지 않아요.하지만 더 나아 지려고합니다. 지금 확인 콘텐츠/색인 작업 및보기가 있습니다. 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);
나를 위해 작동하지 그리고 난 아이 액션이 필터를 사용하면 컨트롤러 오류에 리디렉션 할 수 없습니다.
코드와 내 리디렉션 코드 사이에 다른. 두 코드 모두 잘 작동합니다. 하지만 내 문제는이 코드는 그냥 주요 작업을 작동하고 게시물 작업 또는 partialviewresualt 작업을 작동하지 않습니다. –