MVC过滤器操作重定向

时间:2015-06-17 15:15:16

标签: c# asp.net-mvc actionfilterattribute

我尝试了两种不同的方式

这种方式有效,但在执行重定向之前会处理操作的所有代码。这导致我们使用防伪标记

的问题
    public class CheckAjaxRequestAttribute : ActionFilterAttribute
{
    private const string AJAX_HEADER = "X-Requested-With";

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        bool isAjaxRequest = filterContext.HttpContext.Request.Headers[AJAX_HEADER] != null;
        if (!isAjaxRequest)
        {
            filterContext.HttpContext.Response.Redirect("/");
        }
    }
}

我看到的第二种方式建议我收到以下错误 “不允许子操作执行重定向操作。”

        public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Buffer = true;
        bool isAjaxRequest = filterContext.HttpContext.Request.Headers[AJAX_HEADER] != null;
        string redirectUrl = string.Format("{0}://{1}/", filterContext.HttpContext.Request.Url.Scheme, filterContext.HttpContext.Request.Url.Authority);
        if (!isAjaxRequest)
        {
            //filterContext.HttpContext.Response.Redirect("/");
            filterContext.Result = new RedirectResult(redirectUrl);

        }
    }
}

这样做的目的是防止在未通过ajax调用时加载部分视图。代码有效,但重定向错误,我们的安全扫描在@Html.AntiForgeryToken()抛出错误时捕获了问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

对于你的isAjaxRequest,你应该能够使用:

filterContext.HttpContext.Request.IsAjaxRequest();
相关问题