我試過了這2種不同的方式MVC篩選器動作重定向
這種方式可行,但在執行重定向之前處理所有動作的代碼。這將導致在以往任何時候,我們使用的是抗僞造令牌的問題
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()
引發錯誤時發現問題。
任何幫助將不勝感激。
請添加一個標籤在您的代碼段使用的編程語言(我認爲這是C#)。 – Kryptos
如果您取消了「ChildActionOnly」屬性,第二種方法將起作用。 – mattytommo
我沒有使用ChildActionOnly屬性 –