您的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 方法中进行检查。
非常感谢
答案 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
}
}
}