2014-02-14 22 views
1

喜對我的ASP.NET MVC的網站命名爲MyClassAuthorizationAttribute過濾器:一個FilterConfig - 不包括AJAX調用OnAuthorization

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方法。

非常感謝

回答

2

您可以添加一個if語句您OnAuthorization過濾器內部檢查,如果請求非Ajax類型:

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

這正是我需要的!非常感謝,太快了!我會在10分鐘內將其標記爲已接受。 –