Asp.net mvc 在ActionFilterAttribute中说明这是否是重定向
我试图创建一个ActionFilterAttribute,每个请求只运行一次,所以我正在做类似的事情Asp.net mvc 在ActionFilterAttribute中说明这是否是重定向,asp.net-mvc,asp.net-mvc-4,actionfilterattribute,Asp.net Mvc,Asp.net Mvc 4,Actionfilterattribute,我试图创建一个ActionFilterAttribute,每个请求只运行一次,所以我正在做类似的事情 public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.IsChildAction) return; // More stuff here } 我可能需要检查filterContext.HttpContext.Request
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.IsChildAction)
return;
// More stuff here
}
我可能需要检查filterContext.HttpContext.Request.IsAjaxRequest()
在某些情况下是否为false,但我真正的问题是如何判断它不是重定向。当操作X
重定向到操作Y
时,过滤器运行两次,一次用于X
,一次用于Y
(对于Y
,IsChildAction
为false)
我试图在filterContext.HttpContext.Items
上保存一些键,这将告诉我筛选器已运行,但这些项在X
和Y
之间不共享
你知道我如何从
ActionExecutingContext
中判断这是一个重定向吗?我相信这就是你想要的:
您可以检查它是重定向结果还是重定向到路由结果
var redirectResult = filterContext.Result as RedirectResult;
if (filterContext.Result is RedirectResult)
{
// It was a RedirectResult => do something
}
else if (filterContext.Result is RedirectToRouteResult)
{
// It was a RedirectToRouteResult => do something
}
我的过滤器的目的是在满足某些条件时阻止操作。我需要OnActionExecuting而不是OnActionExecuted的解决方案。