對不起,我的英語不好,但我試圖讓自己變得更好。 現在確定 我有一個內容/索引操作和視圖。我有一個表單提交評論與添加評論/評論部分和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);
沒有爲我工作,不能重定向到錯誤控制器的時候,我用兒童的行動這個過濾器。
我重定向代碼之間沒有什麼不同與您的代碼。這兩個代碼都工作正常。但我的問題是這個代碼只是一個主要的行動,而不是一個後期行動或partialviewresual行動。 –