2011-12-07 106 views
16

我正在使用ActionFilter來確定用戶是否有權訪問某個特定資源(例如Account對象(la Rhino Security)),然後才能執行操作。這是一個全球性的過濾器會被重定向到一個錯誤頁面應在授權值失敗ASP.NET MVC ActionFilter - 確定是否AJAX請求

我用下面的代碼,這對於整個頁面的請求正常工作:

filterContext.Controller.TempData["ErrorMessage"] = string.Format("You are not authorized to perform operation: {0}", operation); 
filterContext.Result = new RedirectResult("~/Error/AuthorizationError"); 

Ajax請求我不想應用重定向,而是返回錯誤消息。如果這是一個AJAX請求或一個普通的完整頁面(抱歉,不確定正確的術語)請求,有沒有一種方法可以告訴Action Filter?

在此先感謝

JP

回答

37

你可以使用IsAjaxRequest擴展方法:

if (filterContext.HttpContext.Request.IsAjaxRequest()) 
{ 
    // it was an AJAX request 
    ... 
} 
else 
{ 
    // it was a standard request 
    filterContext.Controller.TempData["ErrorMessage"] = string.Format("You are not authorized to perform operation: {0}", operation); 
    filterContext.Result = new RedirectResult("~/Error/AuthorizationError"); 
} 
+1

這看起來正是我們正在努力做的事情。但是...由於某種原因,當它是一個AJAX請求時,條件'filterContext.HttpContext.Request.IsAjaxRequest()'不會回來。另外...你如何將用戶重定向到ajax請求的新頁面? – Aarmora

+0

@Aarmora - 好奇,你有沒有解決你的問題? – bubbleking

+0

@bubbleking我希望我能給你一個很好的答案。我什至不記得我們正在嘗試用這個網頁。對不起:( – Aarmora

相關問題