2009-07-23 32 views
12

Tôi đang sử dụng Unity để khởi tạo một lớp mới vào bộ tạo điều khiển và lưu lớp được tiêm vào một thuộc tính bên trong bộ điều khiển. Sau đó, tôi muốn sử dụng một ActionFilter để xem nếu lớp được tiêm có một số thuộc tính mà tôi xác nhận hợp lệ bên trong constructor của nó. Vậy có cách nào để sử dụng ActionFilter để hợp lệ hóa các thuộc tính của lớp được tiêm không?ASP.NET MVC - Truy cập một thuộc tính điều khiển trong một ActionFilter

Cảm ơn trước

Trả lời

32

Something như thế này ?:

public class ValidateActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var yourController = filterContext.Controller as YourController; 

     if (yourController == null) 
     { 
      throw new InvalidOperationException("It is not YourController !!!"); 
     } 

     // It is YourController - validate here 
     var yourProperty = yourController.YourProperty; 

     // UPDATED *************************** 
     // or test whether controller has property 

     var property = filterContext.Controller.GetType().GetProperty("YourProperty"); 

     if(property == null) 
     { 
      throw new InvalidOperationException("There is no YourProperty !!!"); 
     } 
    } 
} 
+0

nhờ skaffman. Vấn đề là bộ lọc sẽ nằm trong mọi bộ điều khiển nhưng không phải tất cả chúng sẽ được định nghĩa. Vì vậy, tôi phải xem xét xem nó tồn tại trong bộ điều khiển hiện tại và sau đó kiểm tra giá trị nếu nó:) ... –

+3

Cách dễ nhất để làm điều này là tạo giao diện IContainsYourProperty (với một thuộc tính YourProperty duy nhất) và có bộ điều khiển mà phơi bày tài sản này thực hiện giao diện, sau đó bộ lọc có thể kiểm tra sự tồn tại của giao diện này trên bộ điều khiển. Nếu không, hãy sử dụng Phản chiếu để kiểm tra thuộc tính, nhưng điều này có thể là quá mức cần thiết. – Levi

+0

Đó là những gì tôi đã làm. Cảm ơn Levi :) –

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