2011-12-07 29 views
16

Tôi đang sử dụng ActionFilter để xác định xem người dùng có quyền truy cập vào một tài nguyên cụ thể như đối tượng Tài khoản (a la Rhino Security) hay không trước khi nhấn một hành động. Đây là một bộ lọc toàn cầu mà chuyển hướng đến một trang lỗi nên giá trị cho phép thất bạiASP.NET MVC ActionFilter - Xác định xem AJAX Request

Tôi đang sử dụng đoạn mã sau, trong đó hoạt động tốt cho các yêu cầu trang đầy đủ:

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

yêu cầu Ajax Tôi không muốn áp dụng chuyển hướng, nhưng trả lại một thông báo lỗi. Có cách nào để nói bên trong các bộ lọc hành động nếu đây là một yêu cầu AJAX hoặc một trang đầy đủ thường xuyên (xin lỗi không chắc chắn về các thuật ngữ chính xác) yêu cầu?

Cảm ơn trước

JP

Trả lời

37

Bạn có thể sử dụng phương pháp IsAjaxRequest mở rộng:

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

này trông giống như chính xác những gì chúng tôi đang cố gắng làm. Nhưng ... vì lý do nào đó mà điều kiện 'filterContext.HttpContext.Request.IsAjaxRequest()' không quay lại đúng khi nó là một yêu cầu AJAX. Ngoài ra ... làm thế nào bạn sẽ chuyển hướng người dùng đến một trang mới từ một yêu cầu ajax? – Aarmora

+0

@Aarmora - Tò mò, bạn đã từng giải quyết vấn đề của mình chưa? – bubbleking

+0

@bubbleking Tôi ước gì tôi có câu trả lời tốt cho bạn. Tôi thậm chí không thể nhớ trang nào chúng tôi đang cố gắng với điều này. Lấy làm tiếc :( – Aarmora

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