2012-08-30 21 views
10

Tôi đã tạo một tuỳ chỉnh Action Filter mà không có vấn đề gì.Bộ lọc hành động MVC bằng cách sử dụng các thông số được chuyển đến cho ActionResult?

Nhưng tôi muốn sửa đổi Bộ lọc hành động để sử dụng một số thông số thực sự được chuyển cho phương pháp của tôi.

Vì vậy, nếu tôi có phương pháp sau đây:

[HttpPost] 
[MyAttribute] 
public ActionResult ViewUserDetails(Guid userId) 
{ 
    // Do something 
} 

Làm thế nào tôi có thể nhận được quyền truy cập vào userId từ bên trong MyAttribute? Có cách nào tôi có thể trực tiếp vượt qua nó?

+0

Tôi không nghĩ rằng có cách để truy cập ID người dùng được chuyển vào thông số đó. Có lẽ là một cách để truy cập vào USER id của người dùng đăng nhập vào hệ thống của bạn mặc dù. Và bạn có thể truy cập mọi thứ trong dữ liệu Xem ... nhưng tôi sẽ không khuyên bạn nên đi tuyến đường đó ngay cả khi bạn có thể. – AwDogsGo2Heaven

Trả lời

13

Bạn có thể thử ghi đè OnActionExecuting, nơi bạn có quyền truy cập vào thông số hành động.

public class MyAttribute: ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    {  
     if (filterContext.ActionParameters.ContainsKey("userId")) 
     { 
      var userId = filterContext.ActionParameters["userId"] as Guid; 
      if (userId != null) 
      { 
       // Really?! Great!    
      } 
     } 
    } 
} 
0

Bạn có thể tạo thuộc tính tùy chỉnh xuất phát từ FilterAttribute và triển khai IAuthorizationFilter.

Bạn cũng có thể nhận thông tin người dùng theo phương pháp OnAuthorization bằng cách truy cập filterContext.HttpContext.User.Identity mà không cần phải chuyển userid.

+0

Tôi không nghĩ anh ấy nhất thiết phải tìm kiếm id người dùng đã đăng nhập, có vẻ như anh ấy đang tạo trang quản trị để xem bất kỳ người dùng nào. –

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