我尝试了两种不同的方式
这种方式有效,但在执行重定向之前会处理操作的所有代码。这导致我们使用防伪标记
的问题 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()
抛出错误时捕获了问题。
非常感谢任何帮助。
答案 0 :(得分:0)
对于你的isAjaxRequest,你应该能够使用:
filterContext.HttpContext.Request.IsAjaxRequest();