FilterConfig - 不包括AJAX调用的OnAuthorization

时间:2014-02-14 15:38:38

标签: c# asp.net-mvc

您的ASP.NET MVC网站上有一个名为 MyClassAuthorizationAttribute 的过滤器:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new MyClassAuthorizationAttribute());
    }
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyClassAuthorizationAttribute : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.User.Identity.IsAuthenticated && 
            filterContext.ActionDescriptor.ActionName != "LogOut")
        {
            //Code Here
        }
    }
}

正如您所看到的,每次执行控制器操作时,此代码都会运行。我担心的是我有一些只在AJAX调用上使用的控制器动作,甚至那些当然会提升这个过滤器,但是我不希望这种情况发生。

无论如何要避免或者对 OnAuthorization 进行任何过滤而不能捕获这些AJAX调用?

我正在尝试避免手动创建一个Ajax操作列表,以便在我的 OnAuthorization 方法中进行检查。

非常感谢

1 个答案:

答案 0 :(得分:2)

您可以在OnAuthorization过滤器中添加if语句,以检查请求是否为非ajax类型:

public void OnAuthorization(AuthorizationContext filterContext)
{
    if (!filterContext.HttpContext.Request.IsAjaxRequest())
    {
        if (filterContext.HttpContext.User.Identity.IsAuthenticated && 
            filterContext.ActionDescriptor.ActionName != "LogOut")
        {
            //Code Here
        }
    }
}