MVC 筛选器操作重定向
本文关键字:重定向 操作 筛选 MVC | 更新日期: 2023-09-27 17:56:50
我尝试了 2 种不同的方式
这种方式有效,但在执行重定向之前处理操作的所有代码。 这会导致我们使用防伪令牌的问题
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()
抛出错误时,我们的安全扫描会捕获问题。
任何帮助将不胜感激。
对于您的 isAjaxRequest,您应该能够使用:
filterContext.HttpContext.Request.IsAjaxRequest();