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

Tôi đã tạo thuộc tính PermissionAuthoize để cho phép kiểm tra người dùng trên hành động cụ thể. Tôi gặp sự cố Sau khi phiên Người dùng hoặc vé hết hạn vào thời điểm đó nếu người dùng gửi ajax requrest cho Bộ điều khiển thì Thuộc tính ủy quyền từ chối yêu cầu và trả lại dưới dạng biểu mẫu đăng nhập html cho người dùng.khác người dùng khu vực nghĩ rằng ứng dụng không hoạt động. nó cho thấy tác động xấu đến người dùng.Làm thế nào để chuyển hướng unauthorize Ajax reqest trên Controller để đăng nhập trang? .

vì vậy, tôi muốn chuyển hướng đến người dùng đến trang đăng nhập nếu họ gửi yêu cầu ajax khi vé hết hạn.

Tôi có thể tạo một thuộc tính ủy quyền khác cho bộ điều khiển không?

+0

Darin đã trả lời ở đây: http://stackoverflow.com/questions/5238854/handling-session-timeout-in-ajax-calls –

Trả lời

3

mã sau đây có thể giúp bạn:

$.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    
     } 
    } 
}) 

Về cơ bản bạn chỉ có thể kiểm tra xem có chuyển hướng và làm công cụ thường xuyên trong success/error callbacks, nhưng khi bạn nhận được chuyển hướng tiêu đề http bạn thay đổi window.location.href đến trang đăng nhập mong muốn

5

Điều đầu tiên bạn cần làm là định cấu hình mô-đun xác thực biểu mẫu để dừng chuyển hướng đến trang đăng nhập khi 401 được ném. Phil Haack đã viết một nice article về cách thức này có thể đạt được.

Khi bạn làm điều đó, bạn sẽ có thể nắm bắt 401 mã trạng thái HTTP trên máy khách. Vì vậy, bạn có thể viết một global ajax handler sẽ chuyển hướng tới trang đăng nhập khi 401 mã trạng thái được gửi từ máy chủ (mà sẽ xảy ra khi vé các hình thức xác thực hết hạn hoặc người dùng không được xác thực nào cả):

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

Cách gud của nó để phát hiện lỗi ajax nhưng trong senerio của tôi tôi đang sử dụng nguồn dữ liệu kendo ui trong một số trường hợp như thả xuống dữ liệu và dữ liệu lưới. bằng cách này tôi không xử lý lỗi ajax. – pargan

Các vấn đề liên quan