【问题标题】:FilterConfig - OnAuthorization excluding AJAX CallsFilterConfig - OnAuthorization 不包括 AJAX 调用
【发布时间】:2014-02-14 15:38:37
【问题描述】:

您好,我的 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 方法。

非常感谢

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以在 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
            }
        }
    }
    

    【讨论】:

    • 这正是我所需要的!!非常感谢,这么快!我会在 10 分钟内将其标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多