我正在尝试创建一个每个请求只运行一次的ActionFilterAttribute,所以我正在做这样的事情。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.IsChildAction)
return;
// More stuff here
}
在某些情况下,我可能需要检查filterContext.HttpContext.Request.IsAjaxRequest()
是否也是假的,但我真正的问题是如何判断它不是重定向。当操作X
重定向到操作Y
时,过滤器会针对X
运行一次,针对Y
运行一次(IsChildAction
对Y
为false })。
我尝试在filterContext.HttpContext.Items
上保存一些密钥,这会告诉我过滤器已经运行,但这些项目不会在X
和Y
之间共享。
我可以从ActionExecutingContext
告诉我这是一个重定向吗?
答案 0 :(得分:0)
我相信你正在寻找的东西是这样的:
Using an MVC Action Filter to catch redirects in Ajax requests and return a JsonResult
您可以检查它是重定向结果还是重定向以路由结果
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
}