2013-03-14 82 views
6
[Authorize] 
public class MyController : BaseController 
{ 
    [PermissionAuthorize] 
    public ActionResult GridData() 
    { 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 
} 

我已創建PermissionAuthoize屬性,用於檢查特定操作的用戶權限。 我遇到問題當用戶會話或故障單在那時如果用戶向控制器發送ajax請求,那麼授權屬性拒絕請求,並返回爲user.this區域的用戶認爲應用程序的HTML登錄表單。其對用戶呈現不良影響。如何將Controller上未授權的Ajax請求重定向到登錄頁面? 。

所以,我想重定向到用戶登錄頁面,如果他們發送票證過期Ajax請求過期。

我可以爲控制器創建一個其他授權屬性嗎?

+0

達林給出答案在這裏:http://stackoverflow.com/questions/5238854/handling-session-timeout-in-ajax-calls – 2013-03-14 08:19:57

回答

3

下面的代碼可以幫助你:

$.ajax({ 
    url: 'url',  
    statusCode: { 
     404: function() { 
      //page not found 
     }, 
     200: function() { 
      //ok, do your stuff 
     }, 
     302: function() { 
      //redirect - check if url contains login and do redirect    
     } 
    } 
}) 

基本上你只能檢查重定向和success/error回調做定期的東西,但是當你重定向HTTP標頭更改window.location.href所需的登錄頁面

5

您需要做的第一件事是配置表單身份驗證模塊以在401引發時停止重定向到登錄頁面。 Phil Haack寫了一篇關於如何實現這一點的nice article

一旦你這樣做了,你將能夠在客戶端捕獲401個HTTP狀態碼。所以,你可以寫一個global ajax handler將重定向到時401狀態碼從服務器發送(當窗體身份驗證票證過期或用戶沒有在所有的認證,這將發生)的登錄頁面:已經

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status == 401) { 
     // unauthorized 
     window.location.href = '/logon'; 
    } 
}); 
+1

其gud方式來檢測ajax錯誤,但在我的senerio我在某些情況下使用kendo ui數據源如下拉數據和網格數據。通過這種方式,我無法處理Ajax錯誤。 – pargan 2013-03-14 08:47:47

相關問題